0

我有一个用户从我们网站上的 ajax 调用中得到错误。

错误粘贴在下面。

他们在 FF3 Windows 中得到错误,但在 IE 中没有。

根据一些搜索,这个问题似乎通常是由客户端协议 squid 引起的(您会在错误末尾注意到,提到了 squid)。

我的 ajax 代码与此处使用的相同:http: //www.w3schools.com/Ajax/ajax_browsers.asp

有任何想法吗?

ERROR

The requested URL could not be retrieved

While trying to process the request:

POST /library/cart/cart_ajax.php?action=refreshCartWidget&qty=dontuse& HTTP/1.1
Host: mydomain.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3 (.NET CLR 3.5.30729)

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: identity,gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300

Connection: Close
Referer: http://mydomain.com/library

Pragma: no-cache
Cache-Control: no-cache

The following error was encountered:

Invalid Request
Some aspect of the HTTP Request is invalid. Possible problems:

Missing or unknown request method
Missing URL
Missing HTTP Identifier (HTTP/1.0)
Request is too large
Content-Length missing for POST or PUT requests
Illegal character in hostname; underscores are not allowed
Your cache administrator is webmaster. 
Generated Wed, 12 Nov 2008 09:28:58 GMT by ipwal3.osi-tech.com (squid/2.6.STABLE17)
4

3 回答 3

2

节省一些时间并使用jQuery。它对 ajax 有一个抽象,它适用于所有浏览器,而不仅仅是 Internet Explorer,也许还有 FF。;-) 我假设那里的代码很旧并且很长时间没有得到更新。

jQuery中一个简单的ajax调用如下:

$.post(
  '/the/url/to/post/to',
  { some: data },
  function(data) { alert(data); }
);

如果您了解 HTTP 的基础知识,它也会有所帮助 - 例如,请求方法 ( PUT, POST, GET, DELETE, HEAD) 等等。您粘贴的错误意味着Content-Length您的请求中缺少标头,并且大多数服务器(如果不是全部)希望在您发出时发送它,PUT或者POST因为那些被假定为“数据更改”(例如创建、更新)。

也许 IE 会为您添加标题,但 Firefox 显然不会。

jQuery 负责所有这些。;)

于 2008-11-12T11:40:01.743 回答
1

如果 FF 不为您执行此操作,您可以在 XHR 对象上使用 .setRequestHeader() 来设置内容长度。

由于您在 .send(content) 方法中发布数据,因此只需在此之前添加一个带有 content.length 的标题。

于 2008-11-12T12:15:52.107 回答
0

您应该与您的用户坐在一起,并将Fiddler HTTP 跟踪工具放在两者之间。然后您可以轻松比较 IE 和 FF3 发送的请求。

通过这种方式,应该可以看到差异在哪里以及它们导致问题的原因。

于 2008-11-12T12:42:59.930 回答