1

我遇到了一個帶有重定向的http請求問題。就像這樣:如何在重定向之前保持請求已完成

有網頁A上的按鈕,如果你按一下按鈕,它會觸發:

  1. 發送多個HTTP請求到遠程服務器
  2. 重定向記住這個click事件到頁面乙

問題是: 事件N.1上面還沒有完成,但是頁面A已經重定向到網頁B


我試圖在Chrome中測試這種行爲,它顯示了上述事件N.1的所有http請求的狀態200。但是在Firefox中,我試圖用firebug進行調試,並選擇persist選項來保留網絡中的所有請求,但列表中沒有請求。

所以我有兩個

  1. 的Firefox的配置是不正確的
  2. 放入系統在Chrome請求只是 「碰巧」 說完,好運氣。

請有人可以給我一些提示或答案弄清楚嗎?謝謝

+0

所以你想在所有的http請求返回後重定向? – chchrist

+0

@chchrist是!但我也擔心它會使頁面B「加載」得太慢 –

+0

如果您不構建單頁面應用程序,您可以只加載部分頁面而無需重定向,那麼這總是一個問題... – chchrist

回答

0

你應該callbacks工作(這些功能,當事情結束時觸發 - 一個HTTP請求在這種情況下) 如果你使用jQuery,你可以使用此代碼:

$.ajax(
    { 
     type:'GET', 
     url:'/someurl', 
     data:"someData=12345&someOtherData=foo", 
     success: function(data){ 
     // do something - for instance your second http request 
     }, 
     error : function(data){ 
     //something didnt went quite well 
     } 
    } 
); 

當你不使用jQuery,this function可能會派上用場(如果你想在第一個例子中添加類似的數據,你必須查詢字符串添加到URL參數):

function callAjax(url, callback){ 
    var xmlhttp; 
    // compatible with IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp = new XMLHttpRequest(); 
    xmlhttp.onreadystatechange = function(){ 
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200){ 
      callback(xmlhttp.responseText); 
     } 
    } 
    xmlhttp.open("GET", url, true); 
    xmlhttp.send(); 
} 

您可以交叉的地方CAL直到你進入最後的重定向呼叫。但要注意,你不希望在callback hell

+0

感謝您的回覆!我喜歡你的答案,但它不適合我的情況:我想改進發送事件N.1的請求的代碼,而不改變重定向的代碼。 –

0

我建議你Promises.alljquery.when

工作,防止click事件冒泡,然後發出Ajax請求,並將它們傳遞作爲承諾的數組結束。

+0

謝謝您的回覆!不幸的是,代碼中沒有使用兩個。 –

+0

然後你回調的解釋在其他答案,但要注意厄運https://en.wikipedia金字塔。組織/維基/ Pyramid_of_doom_(編程) – chchrist

相關問題