Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在异步ajax请求之前运行函数_Javascript_Jquery_Ajax_Asynchronous - Fatal编程技术网

Javascript 在异步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(

我试图在异步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()
函数,因此
返回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请求之前和之后有数百行代码。