2011-03-22 58 views
0

我在那裏一個jQuery $.getJSON/$.ajax call是由一個普通的JavaScript window.location = 'http://new.com/'事件打斷了奇怪的情況。

  1. 火災事件

    window.location = 'http://example.com/something-that-takes-a-couple-seconds'; 
    
  2. 雖然上面的URL連接,但瀏覽器之前實際重繪什麼,讓一個$.getJSON電話。在我的情況下,我碰巧通過滾動到頁面底部來觸發此事件(加載更多結果)。
  3. 而不是實際要http://example.com/something-that-takes-a-couple-seconds,而不是連接到JSON URL http://example.com/ajax/getJSONList.php?params=...,看到了純文本JSON結果集。

之前任何人有這個問題?

我想一個很簡單的解決辦法就是阻止所有進一步的JavaScript執行後,我火window.location改變任何必要的手段嗎?

編輯:您可以看到代碼在這裏的行動:http://myscubadives.com/,但它不會是特別有趣涉水通過。

重現:首先,使用右上角的Facebook登錄按鈕。登錄到Facebook,並允許我的網站訪問。一旦Facebook位連接,下面的行會運行:location.replace('/ user/facebook'); - 我試過location.replace(),location.href,window.location。所有問題都一樣。

現在,當'/ user/facebook'正在連接時,快速滾動到頁面底部。這將激發getJSON調用。而不是擊中'/ user/facebook',您將看到RAW JSON。

如果沒有人能夠以這種方式幫助我,我會嘗試製作一個示例頁面,其中包含所有其他內容。

+0

還有其他的事情在這裏,你不應該在這種情況下看到原始的JSON。你可以發佈代碼嗎? – 2011-03-22 07:29:30

+0

添加評論時請訪問違規頁面並重新鏈接。 – Sam 2011-03-22 07:48:32

+0

不是,在Chrome/FF中每次嘗試約10次。什麼瀏覽器? – 2011-03-22 07:53:44

回答

0

嘛,不應該改變了window.location迫使瀏覽器連接並開始加載新的一頁,棄舊用其所有的AJAX調用?

是的,剛剛檢查,更改window.location的任何屬性,但哈希強制文檔重新加載。所以我猜瀏覽器只是放棄所有當前的AJAX調用來加載一個新文檔,這對瀏覽器來說是非常合乎邏輯的。

至於如何解決這個問題,在設置window.location後禁止所有的AJAX調用。

+0

我應該只是設置/檢查一個全局範圍的標誌,或者你知道阻止所有JS執行的好方法嗎?就像PHP的睡眠()或其他?如果我記得,setTimeout()可能不起作用,我會檢查。 – Sam 2011-03-22 08:45:41

+0

嗯,我試過了。在某些情況下,當window.location事件觸發時getJSON正在進行,這也會導致相同的情況。 – Sam 2011-03-22 10:57:28

+0

您可以嘗試將getJSON調用掛接到document.ready事件。並禁止在getJSON生效時更改window.location(例如,通過設置全局標誌併成功清除getJSON的回調)。 – Kaerber 2011-05-09 20:06:09