安卓上对服务器请求的数据进行json解析错误



  • xhr.onload = function() {
    if (xhr.status === 200) {
    try {
    // var jsonObject = eval('(' + xhr.responseText + ')');
    var jsonObject = _self.toJson(xhr.responseText);
    // var jsonObject = JSON.parse(xhr.responseText);
    if (jsonObject.status.code === '200') {
    successCallback && successCallback(jsonObject);
    } else {
    failedCallback && failedCallback(jsonObject);
    }
    } catch (error) {
    failedCallback && failedCallback(error);
    }
    } else {
    var errorData = {
    status: xhr.status,
    message: xhr.statusText
    };
    failedCallback && failedCallback(errorData);
    }
    };

    这是我的代码;
    当请求成功返回的数据status.code === 200时,json的解析正确,不等于200就解析错误
    请各位指导



  • toJson: function (str) {
    var json = (new Function("return " + str))();
    return json;
    },


  • administrators

    200才是正确返回的代码,200以外基本都不是正确返回的状态



  • 你说的状态是请求的状态吗?就如我上面代码里:xhr.status === 200;这里是请求成功了。
    这个问题追溯到我之前,我使用的是react-native 0.12版本的,那时我在ios上用的json解析方式是JSON.parse();是没问题的。但是将代码移到安卓上就解析失败。后面解析方式改成:eval('(' + xhr.responseText + ')');这样在安卓上也可以了。
    但,我将react-native版本升级到0.21,在安卓上用很多解析方式都不行了



  • 0_1457593635778_QQ图片20160310114036.jpg


  • administrators

    你完全不懂原理吗?http的回复是有状态的,200才表示一个“正常的、健康的”回复,非200的状态——通俗的说,表示出错了。出错了还要怎么能解析出json来?eval是非常古老的不安全的解析方法,你这是开倒车。JSON.parse不管在什么js环境中都可以使用(除了特别古老的桌面浏览器)。



  • @bonon 在安卓上也可以使用JSON.parse(或resp.json())来解析,但既然出错了,你就应当确定下错误的原因,是否服务器返回的并不是JSON,先通过console.log定位一下,不要直接就怪罪于“安卓不支持”什么的啊


登录后回复