ajax中的空响应体(或206部分内容)

时间:2010-05-01 22:01:20

标签: javascript ajax http

我感觉完全愚蠢,因为我花了两个小时来解决任务,这应该是非常简单的,而且之前我解决了很多次。但现在我甚至不确定在哪个方向挖掘。

我无法使用本地服务器(Apache和Mongrel)中的ajax获取静态内容。我得到响应200和206(取决于服务器),空响应文本(虽然Content-Length标题总是正确的),firebug显示红色请求。

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 个答案:

答案 0 :(得分: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代码的任何时间。如果响应在HTTP标头中包含“Accept-Ranges: bytes”和“Content-Range”之类的内容,则可以在http://benramsey.com/archives/206-partial-content-and-range-requests/上阅读