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