blockUI vs ajax,async选项为false

时间:2011-05-15 15:08:10

标签: javascript jquery

我需要调用一个返回ajax调用内容的javascript函数。

为了实现这个结果,我在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函数返回值undefined,可能是因为ajax查询未完成。

如何在javascript函数中解决这个问题,以获取使ajax调用的内容成为阻塞的工具?

谢谢,

安东尼奥

5 个答案:

答案 0 :(得分:8)

你不能。

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

相反,您应该使用回调传递值,方式与$.ajax相同。

答案 1 :(得分:4)

此代码的问题是数据被传递给回调,因此这部分代码

return content;

将在此之前的一段时间内完成

success: function(data){
        content =   data
    }

这是未定义返回的原因。

怎么办?

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

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

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

答案 2 :(得分:1)

你的问题是你最后会回复内容;相反,修改你注册的成功回调中的dom(或调用一个函数)。您可能希望注册一个错误回调,如果服务器返回200以外的其他内容,则会执行某些操作。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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