处理多个ajax请求和响应的最佳方法是什么?

时间:2013-04-07 02:17:17

标签: asp.net-mvc jquery

我有一个使用VB.NET MVC作为服务器端代码的Web应用程序。我设置了客户端JavaScript,以便轻松地向服务器控制器功能发送和接收数据。基本上我所做的是创建一个JavaScript“请求”对象,该对象使用Ajax来调用控制器函数并传入参数。我让MVC为我做了所有的序列化。然后控制器函数返回一个JSON,通常用一个HTML块作为字符串。由于我在一个地方处理所有的ajax调用,我无法找到处理响应的好方法。当ajax响应回来时,我无法知道它来自哪个请求。该网站有很多进展,因此所有响应都需要以不同的方式处理,并且都会返回不同的数据。

现在我所做的是在控制器功能中我发回一些键和HTML块,然后在ajax完成功能中检查所有这些特定键。这样做会使javascript代码难以管理。

var postData =  { id=0 };
 $.ajax({
   type: "POST",
   url: "/Controller/Action/"
   data: postData
}).done(function (data) {
   if (data.Foo) {
    Foo(data);
   } else if(data.Bar) }
    Bar(data);
   }
});

我在研究这个问题时遇到了麻烦,因为我不知道要查找哪些关键字。我想我会尝试做一些我在ajax done函数中动态调用函数名称的东西,但我想知道是否有任何现有的库或代码示例可以执行更大规模的ajax请求函数。

1 个答案:

答案 0 :(得分:0)

也许这个问题来自"在一个地方做所有的事情"。我可以想象,一旦在一个方法中有40个链式if...else if...,维护代码将非常困难。也许毕竟分开的东西不会受到伤害。

无论如何,以你想要的方式做到这一点的方法不是传递密钥,而是将javascript函数的名称作为委托传递。然后在window[data.funcName](data);中致电done()

说你的json是

{
    foo: "bar",
    funcName: "DoMyFoo"
}

这就是您的通话方式:

var postData =  { id=0 };
 $.ajax({
   type: "POST",
   url: "/Controller/Action/"
   data: postData
}).done(function (data) {
   window[data.funcName](data);
});

function DoMyFoo(d){
    //Do your specific stuff here
    alert(d.foo);
}

有关信息和示例,请参阅此问题How to execute a JavaScript function when I have its name as a string

编辑:如果您的函数位于对象实例而不是全局命名空间中,例如obj,则可以使用obj['myFunction'](args)

以相同的方式调用它