我的用户在我们网站上的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)
答案 0 :(得分: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负责所有这些。 ;)
答案 1 :(得分:1)
如果FF没有为您执行此操作,您可以在XHR对象上使用.setRequestHeader()来设置内容长度。
由于您是在.send(内容)方法中发布数据,因此只需在content.length之前添加一个标题。
答案 2 :(得分:0)
您应与您的用户坐在一起,并在其间放置Fiddler HTTP跟踪工具。然后,您可以轻松地比较IE和FF3发送的请求。
这种方式应该可以看出差异在哪里以及它们导致问题的原因。