[英]Javascript json parsing of php response
我正在研究一个项目,并使用ajax更新表单中的某些信息。
这是我的ajax函数:
function update_ad() {
var project_name = document.getElementById("mol_project").value;
if (project_name !== '') {
$.ajax({
type: 'POST',
url: "controllers/get_project.php",
data: {project_name: project_name},
dataType: 'text',
success: function (data) {
var result = JSON.parse(data);
}
});
}
}
在我的开发环境中,一切正常。 该函数从php服务器获取json文本并进行解析,因此之后我可以使用数据。
但是在生产环境中,我收到一个解析错误:
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
这是收到的杰森:
{"project_name":"Jaguar","project_ORB_code":null,"project_manager":null,"project_abbr":"JR","project_mol_index":"2","project_comment":null}
jQuery,apache和php版本在两个环境中都相同。 我想这是服务器配置问题,但我不知道它在哪里。
好的,在您的JSON中,前面有一个UTF-8 BOM。 您能找到以下两者之间的区别吗?
{"project_name":"Jaguar","project_ORB_code":null,"project_manager":null,"project_abbr":"JR","project_mol_index":"2","project_comment":null}
和:
{"project_name":"Jaguar","project_ORB_code":null,"project_manager":null,"project_abbr":"JR","project_mol_index":"2","project_comment":null}
后者是有效的JSON。 使用JSONLint进行检查。 您需要确保接收到的输出没有UTF-8 BOM。
当我尝试在JSON上使用encodeURI()
函数时,它给出了以下输出:
encodeURI(' {"pr'); // "%20%EF%BB%BF%7B%22pr" - Wrong one!
encodeURI(' {"pr'); // "%20%7B%22pr" - Correct one!
我们可以利用encodeURI
来检测异常并在客户端进行修复。 我正在寻找解决方案。
如果看到的话,unicode签名是EF BB BF , 本文将对此进行说明 。 我们可以利用此签名并尝试对其进行更正。
如果您有权访问PHP源代码,请尝试设置正确的标头 :
header("Content-type: application/json; charset=utf-8");
将dataType:'text'替换为dataType:json,
查看JSON规范(此处易于理解的版本: http : //json.org/ )。 没有地方说括号是有效的。 ({“ foo”:true}),例如,永不解析。 由于它是有效的JavaScript,因此可能会被规避,但是javascript不是JSON。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.