在下面的代码fun1()& fun2()是异步执行的,但它们依赖于放在它们上面的json调用的成功。
$.getJSON("../../CreateCustomer/SaveRoleInSession/" + data.SelectedRole, null, function (data) {});
Fun1();
Fun2();
我可以将这些函数调用放在大括号内以使其同步吗?
即:
$.getJSON("../../CreateCustomer/SaveRoleInSession/" + data.SelectedRole, null, function (data)
{
Fun1();
Fun2();
});
答案 0 :(得分:3)
这不会让它完全同步(调用仍然没有阻止),但是它会导致你的方法在返回响应后作为回调的一部分被调用,这可能会很好适合您的情况。
我自己学习jquery ajax,我能说的最好是你需要使用ajax()方法,并将async选项设置为false以实现真正的同步行为。
api浏览器中给出的示例是:
var html = $.ajax({
url: "some.php",
async: false
}).responseText;
我试图在ASP.NET中的客户端验证方法内部发出同步请求,并且当使用JSON服务时,这种方法的一个缺点是你要自己做JSON解析/反序列化而在异步请求中,已解析的数据作为对象传递给您的成功回调。我遇到了你的问题,试图找到解决responseText的首选方法。我看的api浏览器似乎并没有包含parseJSON方法,但是有一个,所以我将使用它与Eval()。
还值得注意的是,在注意到它们的同步示例之前,我试图将async选项设置为false并让我的回调方法写入全局变量,然后在aync调用下面的行中引用var而不是引用XMLHttpRequest.responseText属性,但这是无效的。似乎ajax调用之后的行没有按照这样的方式执行。 YMMV。