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

时间:2015-02-19 17:20:27

标签: javascript jquery json wordpress iis

我有这个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的Windows 8服务器,现在它在parseJSON行中抛出了一个错误(它只发生在Windows环境中):

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

正在检索从PHP函数接收的字符串而没有任何问题,并且Ajax代码在解析字符串之前就到达成功状态(通过启用注释警报行),但是一旦Json解析函数尝试解码它,它崩溃了。 Json字符串由PHP函数和json_encode()编码。

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

[" New Day"," 2"," One Song"," John"," 2014-12 -08 13:04:56"," 1843"," 22"]

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

不知何故,$ .parseJSON和$ .parseJSON函数在IIS 7上使用php不起作用,但它们可以在Apache上运行。在IIS上它总是在我身上崩溃。我尝试了不同的东西来转换从PHP函数检索到的javascript中的json编码字符串,并尝试过滤掉斜线和断行无效。在线json观众表明它是一个有效的json字符串。

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

答案 2 :(得分:0)

这对我来说似乎是一个有效的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]);
        }
    }
});

答案 3 :(得分:0)

拆分退货数据: 在c#asmx中: string _json =&#34;&#34 ;;

_json = getJsonFunction(_dataSet.Tables [0]);  _json + =&#39;`&#39; + getJsonFunction(_dataSet.Tables [1]);

在Jquery中

: Data = JSON.parse(res.d.split(&#39;`&#39;)[0]);