一个ajax处理程序或多个处理程序?

时间:2012-07-01 18:42:33

标签: javascript html ajax

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

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

这有效,但随着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:
                          ....

                    }

1 个答案:

答案 0 :(得分: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方法才能传递覆盖。