2011-05-15 200 views
6

我需要调用一个返回ajax调用内容的javascript函数。blockUI vs ajax with async option to false

为了达到这个结果,我在ajax调用中将async选项设置为false。

 
function ajaxQuery(){ 
    var content; 
    $.ajax({ 
     url: "blabla.html, 
     async: false, 
     success: function(data){ 
      content = data 
     } 
    }); 
    return content; 
} 

不幸的是,将async选项设置为false会使blockUI无法正常工作。 在查询服务器期间,浏览器被冻结而没有消息。

如果我将async选项设置为true,blockUI会正常工作,但是我的javascript函数返回的值未定义,可能是因为ajax查询未完成。

如何在javascript函数中解决这个问题,以获得使ajax调用使blockUI工作的内容?

感谢,

安东尼

+3

每天至少要问这个问题五次。 – SLaks 2011-05-15 15:10:15

回答

7

你不能。

同步AJAX调用将完全冻结浏览器,应该不惜一切代价避免;这是没有办法的。

取而代之,您应该使用回调传递值,与$.ajax一样。

1

你的问题是你在最后返回内容;相反,在你注册的成功回调中修改dom(或者调用一个函数)。您可能想要注册一个错误回调以及在服务器返回200以外的值时执行某些操作。

1

显示正在加载...直到获得响应的状态消息。

4

问题与此代码是数据传递到回调的代码

return content; 

因此这部分在此之前一个

success: function(data){ 
     content = data 
    } 

这是不确定的回报原因将被excecuted一段时间。

那怎么办?

function contentParse(data){ 
    //do things with data received 
} 

$.ajax({ 
    url: "blabla.html", 
    success: function(data){ 
     contentParse(data); 
    } 
}); 

至少我是这么做的。祝你好运。

0

禁用所有其他控制,直到一个操作完成