jQuery Ajax的beforesend在发送前等待是什么意思?

4

我正在尝试在ajaxsetup的beforesend函数中使用settimeout,但似乎发生的是ajax被发送,等待函数在超时后才被调用。我想在超时期间停止请求的发送。

jQuery.ajaxSetup({
    beforeSend: function(){
        setTimeout(continueExecution,1000)

        return true;
    }
});

有人可以提供一种停止从ajaxsetup发送请求的方法吗?


描述:为未来的Ajax请求设置默认值。不建议使用它。 - Kiren S
为什么您想在请求之前设置延迟?如果您发布实际原因,可能会有更好的解决方案。 - Ja9ad335h
3个回答

4
您可以返回false来取消ajax请求,并在setTimeout回调函数中创建新的请求:
$.ajaxSetup({
    beforeSend: function(jqXHR, options) {
        setTimeout(function() {
            // null beforeSend to prevent recursive ajax call
            $.ajax($.extend(options, {beforeSend: $.noop}));
        }, 5000);
        return false;
    }
});

非常感谢,它有效了,唯一的问题是当我为ajax请求添加.done时,它不起作用,但我可以在没有它的情况下处理。 - user1865928

2

你可以尝试将ajax请求放入setTimeout函数中。

setTimeout(function(){
  //do the ajax request
}, 2000);

good luck!


0

beforeSend 没有问题。原因在于setTimeout是异步的。如果您尝试下面的代码,您会发现这一点,但繁忙等待可能不是一个好主意。

jQuery.ajaxSetup({
beforeSend: function() {
    var i = 0;

    function testt() {
        i++;
        console.log(i);
        if (i < 10000) {
            testt();
        }
    }
    testt();
    return true;
}

});


谢谢你的帮助,它起作用了,但有两个问题:a)如果我删除console.log,那么请求会立即发送;b)它会阻塞用户界面,但除此之外,它完全按照我想要的方式工作。你有解决这些问题的方法吗? - user1865928
我认为jcubic的答案会满足你的需求。你试过了吗?我没有更好的解决方案。 - aldebaran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接