Ajax异步:false在慢速网络中加载时冻结网页



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

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

当我尝试从服务器加载网页时,网页速度很慢,所有控件都冻结了。这是"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);
});
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响应之前工作

最新更新