2013-05-17 93 views
4

我正在通過ajax加載json文件。如果Chrome開發工具是開放的,那麼所有功能都可以完美實現如果Chrome開發工具關閉,則失敗。值得慶幸的是開發工具仍然保持做它的事情,即使在關閉時,所以我仍然可以看到異常,我得到:如果chrome開發工具打開AJAX,但是如果chrome web工具關閉,AJAX將無法工作?

Failed to load resource: the server responded with a status of 412 (Precondition Failed) http://localhost/experiments/escape/maps/test.json 

爲什麼會有關於開發工具是否是開放的前提條件?另外,打開和關閉開發工具似乎不太可能以任何方式影響服務器的行爲,所以我認爲這是Chrome阻止請求而不是異常中建議的服務器。

不幸的是,開發工具在關閉時不會跟蹤網絡活動,所以我無法使用網絡選項卡獲取更多信息。

的AJAX是通過JQuery用下面的代碼來處理:

map.load = function(mapName, tileSource, tileWidth, tileHeight, onLoad) { 
    $.ajax({ 
     url: '../escape/maps/'+mapName+'.json', 
     type: 'post', 
     success: function(mapData) { 
      // there's loads of stuff in here but I don't think it's relevant to the question as the failure prevents the success method from being called. 
     } 
    }); 
}; 

此代碼會導致在Firefox中沒有任何問題,因此似乎專爲連接到Chrome瀏覽器開發工具。任何建議歡迎,因爲我完全flummoxed!

編輯:好,所以它不是開發工具的錯誤 - 我已經禁用開發工具中的緩存,重新啓用它允許腳本正常工作。爲什麼我的代碼依賴於緩存?在Firefox中禁用/啓用緩存不會導致任何問題編輯2:好吧,我想我越來越接近了。失敗的先決條件是if-modified-since條件(文件沒有改變)。我認爲chrome發送這個來確認是否使用緩存版本,但是,儘管前提條件失敗,它不會加載緩存版本。我認爲這可能意味着緩存已被破壞,所以我清除了緩存。不幸的是,這並不能解決問題。該文件將愉快地加載一次,但在下次我回到我開始處理同一問題時。有任何想法嗎?

+0

你是否明確地從你的服務器傳遞'412'。如果你是從看服務器代碼中得到一些提示,那究竟是什麼前提失敗?嘗試調試您的服務器代碼。 –

+0

它正在加載一個靜態文件,所以在這種情況下沒有服務器代碼。我相當確定這與服務器無關,否則Firefox會遇到同樣的問題。 –

+0

它不是問題出在服務器上。服務器如何處理它可能會給出關於chrome開發工具正在做什麼的一些線索。也許它是發送一些頭部,你的框架(如果你使用的)不能很好地發揮。 –

回答

3

@Rondel - 你明白了!問題在於我愚蠢地使用'post'來獲取靜態文件。發佈請求永遠不會被緩存,因此Chrome不會檢索它。我仍然不知道爲什麼chrome仍然發送if-modified-since標題,但無論如何改變請求類型以獲得問題的解決方案(對不起,Crome開發工具不公正地指責你 - 問題一如既往,是我的代碼!)

+0

啊,這對於帖子應該不重要。很高興你瞭解它的底部。 – Rondel