前段时间一个同事遇到一个ajax问题,大致的代码如下:
var obj;
if(window.ActiveXObject)
{
obj=new ActiveXObject('Microsoft.XMLHTTP');
}
else if(window.XMLHttpRequest)
{
obj=new XMLHttpRequest();
}
obj.open('POST', url, true);
obj.send(null);
这样的写法,当url足够长的时候,ie下obj.open('POST', url, true);这一行会报一个“没有权限”的错误。我分析了一下,大概得出如下结论,如果分析的不对,望高手指点:
首先我用google chrome浏览器执行了一下他的代码,没有存在任何的问题,但是ie下却报“没有权限”,于是我猜测可能是url过长,于是试验将url弄的短一点,结果发现没有出现问题,于是我猜测可能是ie对于打开open一个请求,url不能超过2,048字节。结果一查资料发现:
Microsoft Internet 浏览器有 2,083 个字符的最大的统一资源定位符 (URL) 长度。 Internet Explorer 也有 2,048 个字符的最大路径长度。此限制适用于 POST 请求和 GET 请求 url。如果使用的 GET 方法您限于减去实际路径中的字符数的有 2,048 个字符的最大。但是,POST 方法不受大小的提交名称/值对的 URL。在标头中并不在 URL 中传输这些对。 RFC 2616,"超文本传输协议--HTTP/1.1,"未指定 URL 长度的任何要求。
最后得出解决方法,参数在obj.send里面传,url只需写出页面的位置。结果发现,没有问题,一切运行正常。