簡體   English   中英

在jQuery中如何發送一個ajax請求后調用一個函數?

[英]in jquery how to call a function after an ajax request has been sent?

瀏覽器完全發送ajax請求后, myFunc1jquery調用我的函數: myFunc1

我想在發送了jQuery ajax之后運行回調函數。 我不想completesuccess執行此操作,因為我不想等待請求完成。 我想在瀏覽器發送了ajax請求后立即將其觸發。

這是我需要的用例:

我想在發出ajax請求后運行一個函數。 我的原始代碼是這樣的:

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

在`myFunc1()更改瀏覽器位置的情況下,瀏覽器將取消待處理的ajax請求。

我當前的解決方案是這樣做:

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

這樣可以確保在ajax完成之前不調用myFunc1 盡管此解決方案有效,但效率不高,因為myFunc1在請求完成myFunc1不會運行。 由於我不在乎ajax請求返回什么,無論它失敗還是成功,所以我不需要等待它完成就可以運行myFunc1函數。

如果您查看規格:

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/zh-CN/docs/Web/API/document.readyState

(找不到chrome的權威來源)

實際上聽起來像您希望函數在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內未響應,則執行callback 瀏覽器發送請求也需要100ms時間。

我嘗試了狀態碼,最后最終沒有使用它們。 我發現它們無法跨瀏覽器運行,並且缺少JSONP請求。

如果您真的不在乎ajax調用是否成功,則可以嘗試使用settimeout方法,只是估算請求應花費的時間。 您還可以采用一種完成方法,以防實際完成之前超出您的估計。 這是一種破解,但可能對您有用。 例如,代碼如下所示:

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

我認為您想使用beforeSend選項。

參見http://api.jquery.com/jQuery.ajax/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM