【问题标题】:What is the best way to handle multiple aiax requests and responses?处理多个 aiax 请求和响应的最佳方式是什么?
【发布时间】:2013-04-08 16:58:57
【问题描述】:

我有一个使用 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 请求函数。

【问题讨论】:

    标签: asp.net-mvc jquery


    【解决方案1】:

    也许问题来自“在一个地方做所有事情”的想法。我可以想象,一旦您在一种方法中链接了 40 个if...else if...,维护您的代码将非常困难。也许把事情分开一点也不会有什么坏处。

    无论如何,按照您想要的方式执行此操作的一种方法是不传递密钥,而是将 javascript 函数的名称作为委托传递。然后在done() 中调用window[data.funcName](data);

    说你的 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) 以同样的方式调用它

    【讨论】:

      猜你喜欢
      • 2013-10-13
      • 2016-11-24
      • 2016-05-26
      • 1970-01-01
      • 1970-01-01
      • 2019-08-05
      • 1970-01-01
      • 2019-10-25
      • 2011-02-26
      相关资源
      最近更新 更多