0

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

4

1 回答 1

0

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

无论如何,按照您想要的方式进行操作的一种方法是不传递密钥,而是将 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 for info and examples。

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

于 2013-04-08T08:58:57.697 回答