samwang
samwang
  • 发布:2015-06-20 10:53
  • 更新:2015-06-20 20:51
  • 阅读:7110

xhr responseText返回数据不完整,用JSON.parse转换就报错。

分类:HTML5+

可能是我手机网络不好。同一条请求,在web端返回的是完整的json字符串。
但是在手机端大概10次请求,只有1次是完整的吧。

那为什么在网络不好的时候xhr.responseText拿到的只是一半的数据???

2015-06-20 10:53 负责人:无 分享
已邀请:
粥冰

粥冰

这个应该不会,网络不好,应该是超时,也不应该是一半的数据,把代码先贴出来把。。

Danny

Danny - QQ125904483

是不是返回有特殊字符啊啊

samwang

samwang (作者)

"request": function(o, isWaiting) {  
            var xhr = new plus.net.XMLHttpRequest();  
            //var xhr = new XMLHttpRequest();  

            xhr.onreadystatechange = function() {  
                switch (xhr.readyState) {  
                    case 0:  
                    case 1:  
                        if (isWaiting) {  
                            w.waiting = plus.nativeUI.showWaiting();  
                        }  
                        break;  
                    case 4:  
                        if (xhr.status == 200) {  
                            closeWaiting();  
                            console.log("readyState 4 status : " + xhr.status);  
                            o.success(xhr.responseText);  
                        } else if (xhr.status == 0) {  
                            console.log("cross domain. ignore it");  
                            console.log(xhr.responseText);  
                        } else {  
                            console.log("readyState 4 status : " + xhr.status);  
                            mui.alert("错误");  
                        }  
                        break;  
                    default:  
                        break;  
                }  
            }  

            xhr.open(o.type, this.site);  
            xhr.setRequestHeader('osname', plus.os.name);  
            xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');  
            xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");  
            xhr.setRequestHeader("Accept", "application/json, text/javascript, */*; q=0.01");  
            xhr.send(param(o.data));  
        }

wjl.request({
"type": "post",
"data": {
"Model": "xxx",
"Action": "xx"
},
"success": function(resp) {
console.log("here -------:" + resp);
console.log("here -------:" + JSON.parse(resp));
}
});

第二句console.log,有时报错,有时正常运行

  • DCloud_App_Array

    是Android还是iOS平台的问题?

    请把完整页面代码贴出来(包括请求的服务器地址)。

    2015-06-23 18:34

  • samwang (作者)

    两个平台都有这个问题。后来打请求数据拆分小了,加了个timeout,这个问题也就没了。

    2015-07-04 18:57

大树哥

大树哥 - 有没有iOS的兼职

两个方向查找问题
1,服务端是否有完整输出内容,可以通过服务器端打日志或者通过客户端抓包的方式,拿到通信数据,确保服务器拿到提完整数据

2,如果第一步确认ok,那就看第二步,如果JSON解析失败,但第一行的代码输出的是完整的数据,则可以确认是JSON不兼容或者格式错误,可以查找JSON内容的问题

该问题目前已经被锁定, 无法添加新回复