我的系统在PHP中运行一些MySQL查询来检索数据。检索到的数据的结构类似于以下数组:
$ret = array(
"name" => "John Doe",
"location" => "Antarctica",
"description" => "Height < 200"
);
我通过AJAX通过以下方式返回:
echo json_encode($ret);
通过Chrome控制台检查返回的数据(jqXHR.responseText)时会触发AJAX错误事件,我注意到:
"description" : "Height \x3c 200"
抛出一个解析错误。
我知道\ x3c是“&lt;”的十六进制表示显然,该表单使JSON无效。我似乎无法找到一种方法来使我能够以有效的形式通过JSON传递有角度的括号。 PHP端的“\ x3c”直接替换字符串不起作用。
此外,我知道将HTML指定为HTML将会起作用,但我传递了一组数据,因此使用了JSON。
答案 0 :(得分:2)
试试这个:
echo json_encode( $ret, JSON_HEX_TAG );
使用json_last_error()
进行调试。
答案 1 :(得分:1)
使用原生Chrome JSON对象(window.JSON),我能够解析你php程序的输出没问题,
"description" : "Height \x3c 200"
并且能够将其序列化为javascript JSON对象。
var jsonString = JSON.stringify({"description": "Height \x3c 200"});
//jsonString has the value "{"description":"Height < 200"}"
var jsonObject = JSON.parse(jsonString);
//jsonObject has an object that looks like this
//Object
//description: "Height < 200"
//__proto__: Object
如果您需要与不支持本机JSON对象的浏览器兼容,我建议您使用JQuery等库。
此外,PHP中的json_encode()函数可以传递一个配置对象来自定义JSON的编码方式,如果您不喜欢'\ x3c',您可以将其更改为您的javascript解析器可能喜欢的内容更像是'≶':)