2011-04-19 82 views
1

在下面的代码fun1()& fun2()是异步执行的,但它们依赖于放置在它们上面的json调用的成功。使Json调用同步同步

$.getJSON("../../CreateCustomer/SaveRoleInSession/" + data.SelectedRole, null, function (data) {}); 
Fun1(); 
Fun2(); 

我可以将这些函数调用放在大括号中使其同步吗?

那就是:

$.getJSON("../../CreateCustomer/SaveRoleInSession/" + data.SelectedRole, null, function (data) 
{ 
    Fun1(); 
    Fun2(); 
}); 

回答

3

这将不完全使其同步(电话仍然没有阻止),但它会导致你的方法获取调用作为回调的一部分后的反应是返回,这可能适合您的情况。

我正在学习jquery ajax,我可以告诉你的是,你需要使用async选项设置为false的ajax()方法来实现真正的同步行为。

在API浏览器给出的例子是:

var html = $.ajax({ 
    url: "some.php", 
    async: false 
}).responseText; 

我试图用时发出同步请求自己在ASP.NET客户端验证方法和一个缺点这种方式的内JSON服务是你自己去做JSON解析/反序列化,而在异步请求中解析的数据作为一个对象传递给你的成功回调。我碰到你的问题,试图找到解析responseText的首选方法。我在看的api浏览器似乎没有包含parseJSON方法,但有一个,所以我会去那个与Eval()。

还值得注意的是,在注意到它们的同步示例之前,我试图将异步选项设置为false,并将我的回调方法写入全局变量,然后在aync调用下面的行中引用该var,而不引用XMLHttpRequest .responseText属性,但这是无效的。看起来ajax调用后面的行没有被执行完成。因人而异。

http://api.jquery.com/jQuery.ajax/

http://api.jquery.com/jQuery.parseJSON/