我的网页在使用时需要发送/接收几个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:
....
}
答案 0 :(得分:0)
这是软件工程的基本挑战之一。您有一个重复执行的任务,但每个变体的细节都会略有变化,因此如何重用代码并保持清洁......每个实体应用都有这个问题。
您需要使用强制执行良好分离关注的设计方法。我通常在我的应用程序的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方法才能传递覆盖。