在JS里使用JQueryj解析WebService返回数据

本文转自http://blog.sina.com.cn/s/blog_53875009010102n1.html


最近做一个东西,需要从浏览器端轮询后台,取得数据。


      起初写的代码里,后台使用Json.Net,通过WebService返回数据。前台用JQuery的ajax函数通过POST方式取得数据。ajax函数的success过程如下:

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,网页一定正常。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值