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

One ajax handler or multiple handler?

本文关键字:处理 程序 一个 ajax      更新时间:2023-09-26

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

一段 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:
                          ....
                    }

这是软件工程的基本挑战之一。 您有一个重复执行的任务,但细节会随着每个变体而略有变化,那么如何重用代码并保持整洁......每个实质性的应用程序都有这个问题。

您需要使用一种设计方法来强制实施良好的关注点分离。我通常在应用程序的 API 上进行开发,该 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 方法只有在有意义的情况下才能传递覆盖。