2010-05-01 73 views
2

我感覺完全愚蠢,因爲我花了兩個小時解決任務應該是非常簡單的,而我之前解決了很多次。但現在我甚至不知道在哪個方向挖掘。ajax(或206部分內容)中的空響應身體

我無法從本地服務器(Apache和Mongrel)使用ajax獲取靜態內容。我得到響應200和206(取決於服務器),空的響應文本(儘管Content-Length標題總是正確的),螢火蟲以紅色顯示請求。

JavaScript是非常通用的,我甚至及彼相同的結果:http://www.w3schools.com/ajax/tryit.asp?filename=tryajax_first (只需更改文件位置「http://localhost:3000/whatever」) 因此,它可能不是原因。

那麼,現在我沒有想法。如果它有幫助,我也可以發佈http頭文件。

謝謝!

Response Headers 
Connection close 
Date Sat, 01 May 2010 21:05:23 GMT 
Last-Modified Sun, 18 Apr 2010 19:33:26 GMT 
Content-Type text/html 
Content-Length 7466 

Request Headers 
Host localhost:3000 
User-Agent Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language en-us,en;q=0.5 
Accept-Encoding gzip,deflate 
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive 115 
Connection keep-alive 
Referer http://www.w3schools.com/ajax/tryit_view.asp 
Origin http://www.w3schools.com 

Response Headers 
Date Sat, 01 May 2010 21:54:59 GMT 
Server Apache/2.2.14 (Unix) mod_ssl/2.2.14 OpenSSL/0.9.8l DAV/2 mod_jk/1.2.28 
Etag "3d5cbdb-fb4-4819c460d4a40" 
Accept-Ranges bytes 
Content-Length 4020 
Cache-Control max-age=7200, public, proxy-revalidate 
Expires Sat, 01 May 2010 23:54:59 GMT 
Content-Range bytes 0-4019/4020 
Keep-Alive timeout=5, max=100 
Connection Keep-Alive 
Content-Type application/javascript 

Request Headers 
Host localhost 
User-Agent Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language en-us,en;q=0.5 
Accept-Encoding gzip,deflate 
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive 115 
Connection keep-alive 
Origin null 

修訂
我發現一個問題,它是關於跨域請求。我知道有限制,但認爲他們對本地文件系統和本地服務器放鬆。 (並且期望更多的描述性錯誤信息,無論如何)
謝謝大家!

+1

謝謝你的頭,但JavaScript代碼本身將是最有用的。 – icio 2010-05-01 22:12:05

+0

它甚至可以成爲我提到的w3schools的例子。你去那裏,改變'ajax_info.txt'到你的本地網址,按'編輯並點擊我',然後'更改內容'。現在你可以在螢火蟲中看到請求。 – 2010-05-01 22:44:22

+0

如果您自己解決了問題,那麼在Stack Oveflow中顯示的解決方案的首選方法是將解決方案編寫爲答案,然後將答案標記爲已接受。這也會阻止你的問題出現在「未答覆」頁面。 – 2010-05-02 13:30:02

回答

1

它似乎只是一個湖緩存問題。只需刪除Internet Explorer中的緩存並重復實驗即可。所有HTTP GET請求將被緩存。 IE緩存也是ajax的迴應。如果你不喜歡它,你可以在URL後加上'?p = blala'這樣的文字。其中'p'是一個名字,它將被解釋爲一個參數的名稱,並且文本'blala'在每個請求中必須是唯一的。通常使用(new Date).getTime()結構來生成這樣的「blala」。 IE將「思考」,該URL是新的,並將始終發送請求到服務器。

修訂:靜態數據的緩存將在所有瀏覽器中進行,特別是如果Web服務器明確允許這樣的:看到Cache-Control: max-age=7200, public, proxy-revalidate是從服務器的響應。只是儘量去http://www.w3schools.com/ajax/tryit.asp?filename=tryajax_first並修改該行

xmlhttp.open("GET","ajax_info.txt",true); 

xmlhttp.open("GET","ajax_info.txt?p=" + (new Date).getTime(),true); 

然後點擊「編輯和點擊我>>」。然後,如果您點擊「更改內容」按鈕,您將在HTTP流量中看到完整的數據。我沒有看到任何時間206代碼。這意味着如果響應了「Accept-Ranges: bytes」和「Content-Range」喜歡「bytes 0-4019/4020」 HTTP標頭的內部,你可以閱讀http://benramsey.com/archives/206-partial-content-and-range-requests/

+0

忘了說,我正在使用Firefox和Chrome進行測試。無論如何,清除緩存確實有助於將206轉換爲200,謝謝!儘管如此,它仍然行不通。 – 2010-05-01 22:41:52

+0

#for update# 它確實刪除了206,正如我所說的,但響應主體仍然是空的(並且請求在螢火蟲中是紅色的,我不知道它是否可以告訴更具體的原因)。 但謝謝你的嘗試。 – 2010-05-02 01:02:57

+0

我沒有時間與http://www.w3schools.com/ajax/tryit.asp?filename=tryajax_first這種效果。如果您的服務器從互聯網訪問,您可以發佈鏈接。或者你有另一種方式,如何重現你所擁有的效果。 – Oleg 2010-05-02 01:14:40