Ajax异步:false在慢速网络加载期间冻结网页

时间:2015-09-15 05:22:07

标签: javascript jquery ajax asynchronous sync

我在网页上使用jquery AJAX并使用async:false选项如下。我的客户网络很慢。当我尝试从服务器网页加载网页时速度很慢,所有控件都冻结了。这是“异步:假”吗?这是我的代码

function ajaxRequestWithNoArguments(url) {
    return $.ajax({
        url: urlForPhp + '/' + url,
        data: '',
        dataType: 'JSON',
        async: false,
        method: 'POST'
    });
}

2 个答案:

答案 0 :(得分:2)

  

当我尝试从服务器网页加载网页时速度很慢,所有控件都冻结了。那是" async:false"物?

是的,这正是您不应该使用async:false的原因,它在非常具体的情况下使用,听起来就像您不需要它一样。使请求同步意味着浏览器将暂停程序执行(也冻结所有UI),直到请求完成,数据被加载并处理。在大多数情况下,您不需要使用默认的async:true。

function ajaxRequestWithNoArguments(url) {
    return $.ajax({
        url: urlForPhp + '/' + url,
        data: '',
        dataType: 'JSON',
        method: 'POST'
    });
}

返回promise对象是处理异步函数的便捷方法。在这种情况下,您将使用ajaxRequestWithNoArguments,如下所示:

ajaxRequestWithNoArguments('/some/url').then(function(response) {
    console.log('Data loaded', response);
});

答案 1 :(得分:-1)

function OpenAjax(link, form_id)
        {
            document.getElementById("page-wrapper").innerHTML = "";
            $.ajaxSetup({ async: true });
            $("#page-wrapper").load(link, function(){
                $("#" + form_id).validator();
            });               
        }

这是我的代码。我有同样的问题,并将其设置为true将修复它。将其设置为true时,可能会出现另一个问题。您的javascript代码将继续有效,如果您有响应文本,则必须告诉JQuery在响应后运行您的代码,如我的示例所示:

$("#" + form_id).validator();

此代码在响应后工作,但如果我以这种方式编写代码

  function OpenAjax(link, form_id)
            {
                document.getElementById("page-wrapper").innerHTML = "";
                $.ajaxSetup({ async: true });
                $("#page-wrapper").load(link, function(){
                 //Code moved from this line  
                }); 
                //Here
                $("#" + form_id).validator();              
                }

$(“#”+ form_id).validator(); - 代码将在Ajax响应之前工作