我有这个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]);