2010-05-01 29 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