2013-10-31 47 views
3

這個問題看起來可能有些奇怪,當頁面經歷web測試時出現問題。頁面在更改位置之前等待AJAX​​

頁面使用AJAX調用(async設置爲true)來收集一些數據。 AJAX返回響應後

console.log("firing ajax call"); 
$.ajax({ 
     type: "POST", 
     url:  "requestedService", 
     data:  mode : "requestedMethod", 
     cache: false, 
     dataType: "json", 
     success: function() { console.log("ajax response received") }, 
     error: null, 
     complete: null, 
    }); 
console.log("changing window location"); 
window.location = "http://www.google.com" 

位置唯一變化:考慮下面的代碼 - 出於某種原因,它不會掉頁的AJAX調用返回之前。我測試過這個調用,它實際上是異步的,頁面沒有被阻塞。即使AJAX調用沒有完成,它也應該加載新頁面,但是不會。我可以看到該頁面正在嘗試加載,但只有在得到響應後纔會發生。有任何想法嗎?

控制檯輸出爲:

firing ajax call 
changing window location 
ajax response received 
+0

好奇,你爲什麼要這樣的事情發生? – ElliotM

+0

就像我說的,這不是一個真正需要的用例,但它發生在執行Web測試時(它們加載頁面,檢查內容,然後或多或少地立即導航到下一頁)。它們失敗是因爲它們在AJAX返回之前被阻止導航到下一頁。 – enp4yne

+0

您是否嘗試將'async'設置爲false? – ElliotM

回答

2

這似乎爲我工作的罰款。在異步處理程序中的代碼執行之前,位置已更改。也許你應該發佈一些真實的代碼而不是簡化的版本,這樣我們可以提供更好的幫助。

這裏是因爲你期望工作的示範:http://jsfiddle.net/BSg9P/

$(document).ready(function() { 

    var result; 

    $("#btn").on('click', function(sender, args) { 
     setInterval(function() { 
      result = "some result"; 
      console.log("Just returned a result"); 
     }, 5000); 
     window.location = "http://www.google.com"; 
    }); 

}); 

這裏是結果的截圖:http://screencast.com/t/VbxMCxxyIbB

我已經點擊了按鈕2次,你可以在看JS控制檯每次都會在結果之前打印有關位置更改的消息。 (錯誤與CORS相關,如果它是相同的域,它將導航)。

+0

我編輯的問題。我也使用記錄器,並根據輸出頁面應該加載響應之前回來。然而,頁面只是等待ajax響應在實際更改位置之前回來... – enp4yne

+0

因此,如果您的代碼語句按正確的順序執行,瀏覽器是否可能需要一段時間才能重定向並導致延遲?你顯示的控制檯輸出看起來正是你想要的,對吧? – Slavo

+0

是的,輸出表明它正在做它應該做的。不過,我可以看到頁面正在等待ajax調用返回 - 如果ajax調用需要更長時間,則重定向需要更長的時間。 – enp4yne

相關問題