我正在尝试在异步ajax请求之前运行一个函数。但是,异步请求获得响应后,函数正在运行。
有没有办法解决这个问题?
block();
ajaxRequest= $.ajax({
url: siteURL+'includes/ajax/action.php',
type: "POST",
async: false,
data: {productID : productID},
dataType: "json"
});
ajaxRequest.done(function(data) {
block(true);
if (data === false) {
alerts('error title','error info here', 'error', 200);
return false;
}
});
ajaxRequest.fail(function(jqXHR, textStatus) {block(true); alerts('error title','error info','error');});
confirm();
我在这些代码之后运行更多功能。但是正如我之前所说,block();
函数正在等待,直到async ajax请求得到响应。
如果我不运行异步,那么我会同时运行block()
和confirm()
个函数,因此return false;
会失去所有意义。
P.S。我在提交表单时运行这些代码,因此如果异步请求失败,我不希望它在其后运行任何其他代码。但是,当它异步运行时block()
正在等待返回响应。
答案 0 :(得分:4)
您的问题是async:false
。您的请求不是异步请求,而是同步请求。它会阻止javascript代码和浏览器呈现在处理请求时发生。使用您当前的设置,删除async: false,
从而使其保持异步应该没有任何害处。
block();
ajaxRequest= $.ajax({
url: siteURL+'includes/ajax/action.php',
type: "POST",
data: {productID : productID},
dataType: "json"
});
ajaxRequest.done(function(data) {
block(true);
if (data === false) {
alerts('error title','error info here', 'error', 200);
return false;
}
});
ajaxRequest.fail(function(jqXHR, textStatus) {block(true); alerts('error title','error info','error');});
ajaxRequest.always(confirm);