Javascript 在jquery中,发送ajax请求后如何调用函数?

Javascript 在jquery中,发送ajax请求后如何调用函数?,javascript,jquery,ajax,readystate,onreadystatechange,Javascript,Jquery,Ajax,Readystate,Onreadystatechange,浏览器完全发送ajax请求后,如何在jquery中调用我的函数:myFunc1 我想在发送jquery ajax后运行回调函数。我不想在complete或success上执行此操作,因为我不想等待请求完成。我想在浏览器发送ajax请求后立即启动它 这是我需要的用例: 我想在发出ajax请求后运行一个函数。我最初的代码是: $.ajax({url: 'x.html'}); myFunc1(); 如果`myFunc1()更改浏览器位置,浏览器将取消挂起的ajax请求 我目前的解决方案是这样

浏览器完全发送ajax请求后,如何在
jquery
中调用我的函数:
myFunc1

我想在发送jquery ajax后运行回调函数。我不想在
complete
success
上执行此操作,因为我不想等待请求完成。我想在浏览器发送ajax请求后立即启动它

这是我需要的用例:

我想在发出ajax请求后运行一个函数。我最初的代码是:

  $.ajax({url: 'x.html'});
  myFunc1();
如果`myFunc1()更改浏览器位置,浏览器将取消挂起的ajax请求

我目前的解决方案是这样做:

  $.ajax({url: 'x.html', complete: myFunc1});

这确保在ajax完成之前不会调用
myFunc1
。虽然此解决方案有效,但效率低下,因为在请求完成之前,
myFunc1
不会运行。因为我不在乎ajax请求返回什么,不管它是失败还是成功,我不需要等待它完成运行
myFunc1
函数。

如果您查看规范:

您将看到2表示已经返回了标题

const unsigned short **HEADERS_RECEIVED** = 2;
这与jqXHR的成功基本相同。您的浏览器可能会有所不同=)

不,说真的。。它们会有所不同,另一个原因是jquery不能全部支持它们并选择对它们进行抽象:


(找不到chrome的权威来源)

如果你真的不在乎ajax调用是否成功,你可以尝试使用settimeout方法,并大致估计请求需要多长时间。你也有一个完成方法,以防它在你估计之前完成。这有点像黑客,但可能对你有用。例如,代码如下所示:

$.ajax({url: 'x.html', complete: myFunc1});
setTimeout(myFunc1,100);

我想您应该使用beforeSend选项


请参见

实际上,您希望函数在AJAX请求启动时启动

$("#btn-ajax").ajaxStart(myFunc1);

function myFunc1() {
   $("#message").html("I don't really care if the ajax call succeeds.");
}

这就是我在AJAX调用完成后充分运行回调函数的方法,这样浏览器就不会取消它,而不必等待服务器完成重新请求:

  var cb = function(){
    window.document.location.href="http://google.com";
  }

  $.ajax({
    url: 'x.html',
    complete: cb,
    timeout: 100
  });
在这里,超时确保如果我的服务器没有在
100ms
内进行响应,则执行
回调
100ms
还有足够的时间让浏览器发送请求


我尝试过状态码,最终没有使用它们。我发现它们在跨浏览器时不可靠,并且缺少JSONP请求。

我希望在从浏览器发送请求后发生事件,而不一定是
readystate=2
。我更新了我的问题以反映这一点。我基本上是说,在每个浏览器中都无法做到这一点。例如,Mozilla仅根据规范启动加载和完成。对于浏览器提供的事件和数据,jQuery只能作为最低公分母。他们提供的事件是唯一可以持续收集的事件。他们都出现了,也许如果我有更多的时间,我可以试着弄清楚他们什么时候开火。有些可能只是BS。如果您对回调不感兴趣,那么只需在ajax调用的同时启动
myFunc1
。OP会在发送请求后显式请求回调。