一个 ajax 处理程序或多个处理程序
One ajax handler or multiple handler?
我的网页在使用时需要发送/接收几个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) {...}
}
保持这种解耦的关键是onSuccess
和onFail
回调。 使用 API 的应用程序传入这些函数;因此,API 对特定于应用程序的逻辑一无所知——它只知道如果适当地触发这些回调。 回调是采用作为响应数据的参数的方法;API 所做的只是将响应数据传递给回调。
由于大多数时候,ajax 调用的详细信息有很多常见项目,因此我也会创建某种触发请求的XhrWrapper
。 因此,在您的loadObjects
中,您将使用xhr助手来发出请求
xhr.sendRequest(url, method, onSuccess, onFail);
通过这种方式,所有发射 xhrs 的乏味都被最小化。
显然,你可以走得更远;例如,大多数时候失败是不好的,所以我的 xhr 包装器将有一个默认的 onFail 实现,并且特定的 API 方法只有在有意义的情况下才能传递覆盖。
- keyup事件处理程序更改焦点不适用于快速键入
- 提示使用服务器端事件处理程序激活JavaScript
- 将事件处理程序绑定到任何可能的事件
- 正在将事件处理程序添加到不存在的类
- 在AJAX回调和呈现PIXIJS之间处理程序流时遇到了问题
- Adobe Edge:动画完成时添加onComplete处理程序
- 是否可以从输入处理程序中确定输入的类型
- 在循环中附加事件处理程序时出现浏览器性能问题
- 在同一个javascript事件处理程序中调用不同的函数
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- 检查事件处理程序参数
- 实现延迟的jquery更改事件处理程序
- 平均值.on(事件[,选择器][,数据],处理程序)
- getSript在同一对象上多次添加处理程序
- 如何使用Node.js在JavaScript模块文件之间使用事件处理程序
- 如何让React JS点击处理程序在执行时更新DOM
- 如何使jQuery的“bind”或“on”事件处理程序幂等
- Backbone listenTo不将jquery函数作为处理程序进行激发
- 带有参数的Javascript事件处理程序
- Jquery事件处理程序仅适用于匿名函数