最近用Ajax来做一个东东,可是在IE8中没错误,IE6、7都出现了错误,最终确认是因为url长度的问题,我的url长度很大有超过4000个字节,而ie6、7不支持这样长的url,ie8是可以,这样就导致了两个问题: 以下将这个长度很长的url简称myurl,且在两个页面都要用到它长长的querystring 1,用模式对话框打开新窗体,即showModalDialog是url过长,ie6、ie7打开的页面出错 2,用ajax的get方法请求另外一个页面ie6、ie7均失败 解决方案: 1,通过showModalDialog的第二个参数,将包含常常的querystring里边的绝大部分内容传到模式对话框, var result = openDialog(url, input, 600, 400, 'status:yes;help:yes;scroll:yes');//这里的inpu是包含那部分常常内容的input 而模式对话框的页面通过document.getElementById('HiddenXml').value=window.dialogArguments.value;来获取值window.dialogArguments.value,这在ie6、7、8、Firefox3.5下均正常 2,ajax使用post的方法而不是get的方法 if(method=='POST') 记得一定要设置请求头部的content-length和conten-type |
?
xmlHttp.send(); 它可以带参数传递。
但你在调用send()方法之前要调用xmlHttp.setRequestHeader('Content-Type', 'application/x-www-
form-urlencoded');,不然会得不到数据。
?
当我们要尝试用GET方式传递WEB页面参数时,不得不考虑会不会因为浏览器地址栏长度限制导致错误。虽然用google能得到一堆,但是也许这些数据会互相矛盾。眼见为实,我用下面的方法测试了一下目前的各种浏览器的地址长度限制。
1.自己搭建一个本地的apache+php的web平台,这个不在本文的讨论范围。
2.在web服务器的根目录建立名为index.php的文件,写入如下内容:
<form method='get' action='index.php'> $char=''; $len=1000; $total_len=strlen('http://localhost/index.php?submit=submit&char=')+$len; for($i=0;$i<$len;$i++){ $char.='1'; } echo $_REQUEST['char']; echo "<p>Address length: ".$total_len; echo "<p><input type='submit' name='submit' value='submit'>"; echo "<p><input type='hidden' name='char' value='".$char."'>"; </form>
3.访问http://localhost/index.php, 通过修改”$len=1000;”这行1000这个数字后点击submit测试各浏览器到地址栏极限。结果为$len所赋值加上”http://localhost/index.php”的46字节的和。
结果如下:
1. Firefox 3.0.3: 当$len 赋值为4053时出错,可见最长字长4098
2. IE7.0: 2083, 结果与官方说法一致
3. Opera 9.60: 4098 , Firefox3.0.3 相同
4. google chrome 0.2.149.30: 4098, 与Firefox3.0.3,Opera 9.60相同
可见Firefox, Opera, Chrome 虽然各自使用了不同的内核,至少在地址栏长度上有高度的默契。
另外,如果用POST方式传递数据,无论传递数据有多大,结果只会让浏览器死掉而不是报错。因为post的数据是放在header里传输的。可见POST传递数据无限制的传言基本上可以认为是正确的。