【问题标题】:empty response body in ajax (or 206 Partial Content)ajax 中的空响应正文(或 206 部分内容)
【发布时间】:2010-05-01 22:01:20
【问题描述】:

我感觉自己完全傻了,因为我花了两个小时来解决应该很简单的任务,而且我以前解决过很多次。但现在我什至不确定该往哪个方向挖掘。

我无法使用 ajax 从本地服务器(Apache 和 Mongrel)获取静态内容。我得到响应 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

更新
我发现了一个问题,它是关于跨域请求的。我知道有限制,但认为对于本地文件系统和本地服务器来说它们是放松的。 (无论如何,预计会有更多描述性的错误消息)
谢谢大家!

【问题讨论】:

  • 感谢标题,但 JavaScript 代码本身将是最有用的。
  • 它甚至可以是我提到的 w3schools 的例子。您去那里,将“ajax_info.txt”更改为您的本地网址,按“编辑并单击我”,然后按“更改内容”。现在你可以在 firebug 中看到请求了。
  • 如果您自己解决了问题,在 Stack Oveflow 上显示该问题的首选方式是将您的解决方案写为答案,然后将您的答案标记为已接受。这也将防止您的问题出现在“未回答”页面上。
  • 我明白了,谢谢。 '你明天可以接受你自己的答案' :/

标签: javascript ajax http


【解决方案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 代码。如果 Response 在 HTTP 标头中包含“Accept-Ranges: bytes”和“Content-Range”之类的“bytes 0-4019/4020”,这意味着您可以在http://benramsey.com/archives/206-partial-content-and-range-requests/ 上阅读

【讨论】:

  • 忘了说,我正在使用 Firefox 和 Chrome 进行测试。无论如何,清除缓存确实有助于将 206 转换为 200,谢谢!虽然,它仍然无法正常工作。
  • #for update# 正如我所说,它确实删除了 206,但响应正文仍然是空的(并且请求在 firebug 中显示为红色,我想知道它是否能说出更具体的原因)。但是感谢您的尝试。
  • 我没有时间使用w3schools.com/ajax/tryit.asp?filename=tryajax_first 获得这种效果。如果您的服务器是从互联网访问的,您可以发布一个链接。或者你有另一种方式,如何重现你所拥有的效果。
猜你喜欢
  • 2021-02-19
  • 2013-03-11
  • 2013-03-28
  • 2019-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-14
  • 2016-09-17
相关资源
最近更新 更多