本文转自http://blog.sina.com.cn/s/blog_53875009010102n1.html
最近做一个东西,需要从浏览器端轮询后台,取得数据。
function GetDataSucceed(resp)
{
var rawtxt=resp.text;
var data = jQuery.parseJSON(rawtext);
}
奇怪的事情发生了,在IE里测试的时候,经常不能取得数据。如果启动fiddler,却一切正常。一开始也没当回事,可后来偶尔发现,程序在FF里根本不能运行。看来问题比较大。
通过调试发现,resp在IE和FF里是不同的。IE里有text属性,但是在FF里没有!阅读jquery的文档得知,success过程一共有三个参数,最后一个是一个jqXHR对象,在FF&IE里都是一样的。jqXHR有个属性叫做responseText,就是返回的原始数据。取到这个responseText,再jQuery.parseXML即可。不过返回的xml dom在FF和IE里又是不同的-_-! IE里可以直接xmldoc.text,FF没有这么方便的方法。
考虑到返回的数据就是一个简单JSON字符串,FF上可以直接xmldoc.firstChild.textContent
var xml = jqXHR.responseText ;
var xmldoc = jQuery.parseXML(xml);
var rawtext = "";
if (xmldoc.text)
{
rawtext = xmldoc.text;
} else if ()
{
rawtext = xmldoc.firstChild.textContent;
}
var data = jQuery.parseJSON(rawtext);
FF正常了,接下来就是IE取不到数据的问题。在IE环境下跑了几遍网页,发现有时候能接收到数据,但是接收到的JSON字符串不完整,而且每次都是在同样的地方截断。由于fiddler一开,程序一定正常。所以开了个wireshark监视HTTP数据包。有趣的事情发生了:wireshark显示response是chunked!尝试将POST改为GET,发现在IE下一切正常。据此可做如下推论:ajax POST返回的数据较长时会分块,IE下取的时候没取全,于是导致程序出错。但是如果打开fiddler,fiddler会将请求的chunk组合后发回给IE,所以一开fiddler,网页一定正常。