2012-08-15 56 views
0

我想修補一些在Chrome中不起作用的AJAX。這不是我的腳本,我寧願不把整個事情轉換成jQuery。XMLHttpRequest的open()在Chrome中失敗

xmlhttp.open("GET", query, true); 
xmlhttp.onreadystatechange = function() { 
    if (xmlhttp.readyState == 4) { 
     console.log(xmlhttp.responseText); 
    } 
} 
xmlhttp.send(); 

這實際上在日誌中輸出的東西,而使用Internet Explorer,但是當(CH)羅馬我得到一個空字符串,因爲JS調試器告訴我,GET失敗。目標網址是正確的,因爲它在IE中工作,但它是某種ASP.NET腳本,其內部工作我不是很熟悉(我在這裏做HTML,CSS和JavaScript)。

爲什麼IE允許從目標檢索信息,但不是Chrome?當使用Chrome xmlhttpXMLHttpRequest和IE獲得某種ActiveXObject

編輯。我發現了一些可能的解決方案hereResponse.Close(),沒有異步或指定/空數據類型。但它是jQuery。

編輯#2。What Chrome is saying about my headers.

+0

如果你想調試,我建議你看看http級別,使用Wireshark或類似的。 – troelskn 2012-08-15 10:39:09

+0

從失敗的GET中得到什麼錯誤?使用status/statusText屬性來檢查這個 – codebox 2012-08-15 10:41:20

+0

服務器是否發送了正確的頭文件「Content-Type:text/plain」? – Andreas 2012-08-15 10:43:51

回答

0

好吧,我解決了它。 Chrome顯然不喜歡在請求頁面末尾有Response.Close()。更改爲Response.End()修復了它。感謝您的幫助!

我也用一行jQuery代替了那個JavaScript。

2

你可以通過在Chrome的地址欄中輸入url來查看url嗎?您的瀏覽器配置可能會阻止Chrome瀏覽器查看服務器。

另一種可能性是您正在被Same Origin Policy弄髒 - 您正在與頁面訪問的網址是否相同?

+0

是的,我可以。這是一個空白頁面,但在查看源代碼時,所有的HTML都在那裏。像這樣:'<真實頁面HTML> AJAXDELIMITER <新頁面HTML>'。 Firefox用'view-source'打開它,但是說內容類型是'text/html'。 – Viktor 2012-08-15 10:56:58

+0

什麼是發送的內容類型標頭? (你可以在Chrome開發者工具中查看) – codebox 2012-08-15 10:58:40

+0

再次,我該怎麼做?我沒有在這裏訪問該項目,但我應該能夠看到什麼標題stackoverflow.com發送,呃?關於同一起源政策:是的。它與JS實際包含的文件相同。我的代碼中的'query'變量以'?id = 42&ajaxcall = 1'的形式存放一個字符串。在瀏覽器中訪問這些內容會爲我提供整個頁面的完整HTML代碼,然後是AJAX腳本應該輸出的HTML代碼。非常差的設計,因爲AJAX請求比整個頁面要重。 – Viktor 2012-08-15 13:37:43