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

时间:2013-09-04 14:03:12

标签: javascript jquery ajax readystate onreadystatechange

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

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

这是我需要的用例:

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

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

在`myFunc1()更改浏览器位置的情况下,浏览器将取消挂起的ajax请求。

我目前的解决方案是:

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

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

5 个答案:

答案 0 :(得分:0)

如果你看一下规范:

http://www.w3.org/TR/XMLHttpRequest/

你会看到2表示已经返回了标题。

const unsigned short **HEADERS_RECEIVED** = 2;

这与jqXHR的成功基本相同。您的浏览器可能会有所不同=)

不认真......它们会有所不同,另一个原因是jquery无法支持它们并选择抽象它们:

http://msdn.microsoft.com/library/ie/ms534361.aspx

https://developer.mozilla.org/en-US/docs/Web/API/document.readyState

(无法找到Chrome的权威来源)

答案 1 :(得分:0)

实际上听起来你希望在AJAX请求开始时触发该函数。

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

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

答案 2 :(得分:0)

这是我在完成AJAX调用后充分运行我的回调函数所做的操作,因此浏览器不会取消它而不必等待服务器完成重新获取:

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

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

此处超时确保如果我的服务器未在100ms中响应,则执行callback100ms也足以让浏览器发送请求。

我尝试了状态代码,最后没有使用它们。我发现它们不可靠的跨浏览器和JSONP请求丢失。

答案 3 :(得分:-1)

如果您真的不在乎ajax调用是否成功,您可以尝试使用settimeout方法,只需估计请求应该花多长时间。你还有一个完成方法,以防它在你估计之前完成。这是一种黑客行为,但它可能对你有用。例如代码将是这样的:

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

答案 4 :(得分:-1)

我想你想使用beforeSend选项。

请参阅http://api.jquery.com/jQuery.ajax/