jQuery.parseJSON()未在Windows服务器上解码有效的Json字符串

jQuery.parseJSON() not decoding a valid Json string on a Windows server

本文关键字:有效 解码 Json 字符串 服务器 parseJSON 未在 Windows jQuery      更新时间:2024-02-17

我有这个wordpress javascript函数代码在Linux服务器上运行和工作,还有一个php函数"get_form_data"。

jQuery.ajax({  
              type: "POST",  
              url: MyAjax.ajaxurl, 
              data: {action: "get_form_data", id: id, cat_id: cat_id},
              success: function(r) {
                            //alert(r);
                            var response = jQuery.parseJSON(r);
               }
});

我将wordpress网站迁移到了带有IIS和PHP的Windows8Server,现在它在parseJSON行中抛出了一个错误,如下所示(只在Windows环境中发生):

SyntaxError:JSON.parse:JSON数据的第2行第1列出现意外字符

从PHP函数接收到的字符串被检索时没有任何问题,Ajax代码在解析字符串之前就进入了成功状态(通过启用注释的警报行),但一旦Json解析函数试图对其进行解码,它就会崩溃。Json字符串由PHP函数使用Json_encode()进行编码。

这是Ajax函数接收到的字符串,据我所知,这是一个有效的字符串。

["新的一天","2","一首歌","约翰","2014-12-08 13:04:56","1843","22"]

["New Day","2","One Song","John","2014-12-08 13:04:56","1843","22"]-是无效的JSON,http://www.w3schools.com/json/json_syntax.asp.将数组包装到数组的对象)

不知何故,$.parseJSON和$.parseJSON函数在带php的IIS 7上不适用,但在Apache上可以工作。它总是在IIS上崩溃。我尝试了不同的方法来转换从PHP函数检索到的javascript中的json编码字符串,并尝试过滤掉斜杠和换行符,但都无济于事。在线json查看器显示它是一个有效的json字符串。

对我有效的是使用老式的eval("("+r+")"),它的工作原理与json解析函数相同,缺点是使用它显然不安全,但我没有其他解决方案。

对我来说,这似乎是一个有效的JSON数组。我用这种方式测试了它,没有出现任何问题:

   var rawJson = '["New Day","2","One Song","John","2014-12-08 13:04:56","1843","22"]';
var json = JSON.parse(rawJson);
for(i = 0; i < json.length; i++) {
    console.log(json[i]);
}

JSON解析将字符串转换为JSON,所以我在数组周围加了单引号,使其成为字符串。

也许你可以试试这个:

jQuery.ajax({
    url: MyAjax.ajaxurl, 
    data: {action: "get_form_data", id: id, cat_id: cat_id},
    dataType: "json",
    success: function(data) {
        // r should be the returned array
        for(i = 0; i < data.length; i++) {
            console.log(data[i]);
        }
    }
});

拆分返回数据:在c#asmx中:string _json=";

_json=getJsonFunction(_dataSet.Tables[0]);_json+='`'+getJsonFunction(_dataSet.Tables[1]);

在Jquery中:数据=JSON.parse(res.d.split('`')[0]);