2017-03-22 28 views
-1

我有兩個順序的ajax發佈請求,完成後,這兩個請求都將導航該頁面。兩個ajax調用,都重定向:一個請求可以失敗嗎?

當然,我應該在導航之前檢查兩個返回,但我很好奇:如下所示,設置是否可以逼真地使其中一個請求失敗?

失敗我的意思是服務器不會收到/處理它。

function redirect(){ 
 
    window.location.href="./success"; 
 
} 
 

 
//First call 
 
$.ajax({ 
 
    type: "POST", 
 
    url: url, 
 
    data: data, 
 
    complete:redirect 
 
}); 
 
    
 
//Second call 
 
$.ajax({ 
 
    type: "POST", 
 
    url: url, 
 
    data: data, 
 
    complete:redirect 
 
});

我的想法:T1,第一AJAX調用製成,T2,第二AJAX調用製成,T3,第一返回的回報和重定向製成。

由於T3> T2,在重定向之前不會進行第二次呼叫嗎?它不必回到成功。

+2

它取決於。機會都將被髮送成功,然後一個將完成並重定向,從而中止另一個。但服務器很好可以繼續處理它,具體取決於時間。所以,是的,一個請求可能會失敗。並且,它可以成功。關於您的編輯,請參閱 –

+0

。這一次取決於請求和網絡的大小。如果T2請求完全到達服務器,則服務器響應T1請求,即使xhr客戶端由於重定向而中止,服務器也可能會處理T2。但也有可能出於同樣的原因,T2在T1之前完成。 –

+0

T3 >>> T2,除非沒有連接,否則在這種情況下兩個請求都會失敗。 – RSinohara

回答

2

這兩個請求都將被提出。無論哪個人先完成將導致瀏覽器取消第二個。但正如Kevin B指出的那樣,你的服務器很可能會繼續處理它,並且不會意識到客戶端取消了它(至少這是它與apache協同工作的方式),直到服務器試圖向客戶端發回一些東西(甚至是那麼這取決於你的體系結構是一個廢話)。

請注意失敗請求與客戶端取消請求之間的區別非常重要。在你的情況下,瀏覽器將取消頁面卸載時正在進行的任何ajax請求,但這並不意味着服務器不會處理它從請求收到的指令。

0

是,AJAX調用是異步,所以回答你的問題

從你的兩個Ajax請求,如果在DOM準備好電話,取其將首先獲得完整的響應將重定向頁面,併發送阿賈克斯最終將失敗。

它會一次調用兩次,但一旦你的頁面被重定向,你的成功回調將失敗,在這種情況下,如果服務器參與第二頁面活動,它最終會失敗。另外,如何向哪個服務器發送成功回調,如果重定向只是客戶端,那麼服務器可能會成功運行。

+1

有趣。我的印象是,第二次電話會在第一次電話回覆之前完成,因爲通話需要一段時間才能完成。 – RSinohara

0

是的其中一個請求可能會失敗,因爲這兩個請求都是異步的,只要其中一個請求完成,頁面將被重定向,從而取消另一個請求。

你可以做的是定義一個變量並在重定向之前檢查它的值。

function redirect(){ 
     window.location.href="./success"; 
    } 
    window.completed = 0; // if values is 2 that means both    requests are complete 

//First call 
$.ajax({ 
    type: "POST", 
    url: url, 
    data: data, 
    complete:function(){ 
    window.complete++! 
    if(window.complete == 2) 
    { 
      redirect(); 
    } 
    } 
}); 

//Second call 
$.ajax({ 
    type: "POST", 
    url: url, 
    data: data, 
    complete:function(){ 
    window.complete++! 
    if(window.complete == 2) 
    { 
      redirect(); 
    } 
    } 
});