0

我的网页在使用时需要发送/接收几个ajax操作。目前我使用一个 ajax 处理程序来处理所有事件。所有 ajax 请求都使用这种格式“(type) | {json string}”发送/接收。

一段 js 代码将处理 ajax 请求/响应:解析响应文本 -> 获取类型 -> 选择...case 在每种类型的情况下做一些事情。

这可行,但随着 ajax 事件的增长,从 0 到 99 的情况太多了。那么维护或进一步开发不太可能是一件容易的工作。

也许我需要将单个 ajax 处理程序拆分为多个?那么浏览器如何知道应该将哪个 ajax 响应发送给特定的处理程序呢?

任何建议表示赞赏。

目前代码如下所示:(其中一个页面使用简单的 javascript,没有使用框架)

  xmlhttp.onreadystatechange = function() {
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                    //alert(xmlhttp.responseText);
                    var reply = decodeArray(xmlhttp.responseText);  //convert to json object and some other stuff 
                    switch (reply.type) {
                          case 0:
                          case 1:
                          ....

                    }
4

1 回答 1

0

这是软件工程面临的基本挑战之一。您有一项任务需要重复执行,但每个变化的细节都会略有变化,那么您如何重用代码并保持干净......每个实质性应用程序都有这个问题。

您需要使用一种设计方法来执行良好的关注点分离。我通常为我的应用程序开发与应用程序的其他部分完全分开的 API。我的 API 只做一件事和一件事——它与服务器通信。

它没有特定于应用程序的代码

这意味着如有必要,我可以在不同的应用程序中重用我的 api。这也意味着我可以独立于应用程序测试我的 API。

所以可以说你需要做类似的事情loadObject。应用程序看到

App.API = {
    loadObject: function(params, onSuccess, onFail) {...}
}

保持这种解耦的关键是onSuccessonFail回调。使用 API 的应用程序传入这些函数;所以 API 对应用程序特定的逻辑一无所知——它只知道如果适当地触发这些回调。回调是接受作为响应数据的参数的方法;API 所做的只是将响应数据传递给回调。

因为大多数时候,你的 ajax 调用的细节有很多共同的项目,我也会创建一些XhrWrapper触发请求的类型。所以在你的loadObjects你会使用你的 xhr 助手来提出请求

xhr.sendRequest(url, method, onSuccess, onFail);

这样就可以最大限度地减少烧制 xhrs 的所有乏味。

显然,您可以走得更远;例如,大多数时候失败是坏的,所以我的 xhr 包装器会有一个默认的 onFail 实现,并且特定的 API 方法可以传入一个覆盖,只有在有意义的情况下。

于 2012-07-01T18:56:54.337 回答