繁体   English   中英

PHP响应的JavaScript JSON解析

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM