我对网页使用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响应之前工作