Javascript 在异步ajax请求之前运行函数
我试图在异步ajax请求之前运行一个函数。但是,函数在异步请求得到响应后运行 有没有办法解决这个问题Javascript 在异步ajax请求之前运行函数,javascript,jquery,ajax,asynchronous,Javascript,Jquery,Ajax,Asynchronous,我试图在异步ajax请求之前运行一个函数。但是,函数在异步请求得到响应后运行 有没有办法解决这个问题 block(); ajaxRequest= $.ajax({ url: siteURL+'includes/ajax/action.php', type: "POST", async: false, data: {productID : productID}, dataType: "json" }); ajaxRequest.done(function(
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()
函数,因此返回false代码>失去所有意义
另外,我在提交表单时运行这些代码,所以如果异步请求失败,我不希望它在提交之后运行任何其他代码。但是,当它异步运行时,block()
正在等待响应返回。您的问题是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);
您的问题是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);
在调用ajax请求之前先调用函数,方法是将调用函数的行放在执行ajax请求的行的上方。这可能不明显,但我以前已经运行过该函数。好吧,您没有发布任何代码,所以只是猜测而已。;-)你能解释一下你想完成什么吗?在发送请求之前,原始的block()
正在运行。@如果block()
正在执行图形或dom更改,由于async:false
停止浏览器渲染,它可能不会出现在ajax请求之前。请在调用ajax请求之前调用函数,方法是将调用函数的行放在执行ajax请求的行上方。可能这并不明显,但我之前已经运行过该函数。嗯,你没有发布任何代码,所以只是猜测而已你能解释一下你想完成什么吗?原始的block()
在发送请求之前正在运行。@Snuffleupagus如果block()
正在执行图形或dom更改,它可能不会出现在ajax请求之前,因为async:false
正在停止浏览器渲染。@Revenant此解决方案应该可以很好地工作。如果对于一些未知的原因,你可能不想考虑使用jQuery内置的“前缀”回调。Ajax功能。<代码>前缀可能会很有帮助。然而,这将促使我在发送前在中添加300多行代码。这同样适用于confirm()
和之后的代码。我相信这是不容易的。也许我应该说;我只希望block()
在此之后运行,等待ajax请求的响应,然后继续(如果ajax请求没有返回false)。@Revenant您看到我刚才添加的示例代码了吗?它会在异步请求后运行确认。是的,Kevin B,谢谢您的帮助。它只需要对我的.js文件进行大量编辑。我只是想通过添加block()来简化事情代码>和确认()代码>。但是,在ajax请求前后有数百行代码。@Revenant此解决方案应该可以完美地工作。如果对于一些未知的原因,你可能不想考虑使用jQuery内置的“前缀”回调。Ajax功能。<代码>前缀可能会很有帮助。然而,这将促使我在发送前在中添加300多行代码。这同样适用于confirm()
和之后的代码。我相信这是不容易的。也许我应该说;我只希望block()
在此之后运行,等待ajax请求的响应,然后继续(如果ajax请求没有返回false)。@Revenant您看到我刚才添加的示例代码了吗?它会在异步请求后运行确认。是的,Kevin B,谢谢您的帮助。它只需要对我的.js文件进行大量编辑。我只是想通过添加block()来简化事情代码>和确认()代码>。然而,在ajax请求之前和之后有数百行代码。