1

我正在尝试在异步 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();函数正在等待异步 ajax 请求得到响应。

如果我不异步运行,那么我会得到block()confirm()函数同时运行,因此return false;失去了所有意义。

PS 我在提交表单时运行这些代码,所以如果异步请求失败,我不希望它在它之后运行任何其他代码。但是,当它异步运行时block()正在等待返回响应。

4

1 回答 1

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);
于 2012-10-12T19:49:20.280 回答