Javascript JSON.parse:意外字符

Javascript JSON.parse:意外字符,javascript,php,json,Javascript,Php,Json,我试图从PHP将json编码的数组返回到div。我收到JSON.parse:意外字符。感谢您的帮助 质疑 在发送数据之前,是否在PHP代码中的任何位置设置内容类型。我在你的例子中看不到这一点 你应该: 标题('Content-Type:application/json') 我已经用你的代码运行了一个简单的测试,它对我来说很好。这是代码 var JSON = '[{"c_ID":"21","c_FirstName":"Mike","c_LastName":"Be","c_Phone":"12345

我试图从PHP将json编码的数组返回到div。我收到JSON.parse:意外字符。感谢您的帮助

质疑


在发送数据之前,是否在PHP代码中的任何位置设置内容类型。我在你的例子中看不到这一点

你应该:
标题('Content-Type:application/json')

我已经用你的代码运行了一个简单的测试,它对我来说很好。这是代码

var JSON = '[{"c_ID":"21","c_FirstName":"Mike","c_LastName":"Be","c_Phone":"123456789","c_ext":"0","c_fax":"0","c_address1":"","c_address2":"","c_city":"","c_state":"","c_zip":"0","c_country":"Account","c_Email":"mike.be@test.com","c_Mobile":"123456789","c_company":"TEST"}]';

var parsed = $.parseJSON(JSON);

console.log(parsed);
我正在使用最新版本的JQuery,它以正确的方式解释JSON。


因此,在我的opnion$中,getJSON()方法无法识别传入的JSON。如果您以文本形式获取数据,然后通过$.parseJSON()对其进行解析(别忘了在项目中包含JQuery的最新版本),它可能适合您。请尝试一下,然后让我知道,我会相应地更改代码。

我会首先尝试发送虚拟数据,例如(根据需要调整-你明白了):

如果这样做行得通,那么我会怀疑数据库中出现了一些字符编码问题,并开始研究utf8转换器函数(它们大量存在php json编码问题)。浏览器控制台可能正在消毒一些东西,这也许可以解释为什么它可以直接工作

如果它不起作用,那么我会制作一个php页面,上面只有回音行,以确保没有发送任何其他内容(并且不要添加结束php标记,这样更安全)


我还将调查您的php版本-据我所知,有些版本存在空白字符串问题。您可以升级或尝试使用为早期php版本(如一个)制作的替代json_encode函数。

非常奇怪,但当重新创建php文件时,问题似乎消失了。。不确定,但我认为这与使用记事本进行编辑有关。。第二次我用Submlime文本创建了文件,结果很好。所以这可能是编码问题。。感谢大家的投入。

可能会得到无效的JSON字符串响应。我今天早上刚刚解决了类似的问题。我决定先检查(try/catch)ajax响应字符串(如果可以解析的话),而不是直接调用JSON属性(在我的例子中是jsonRes.result)。因此,请尝试将以下代码放入AJAX完整回调函数中:

    complete: function(data) {
        var jsonRes = null;
        try {
            jsonRes = JSON.parse(data.responseText);
        }
        catch(e) {
            jAlert('Invalid JSON object);
        }
        if (jsonRes===null || jsonRes.result===undefined) {
            jAlert('Invalid Ajax response structure');
        }
    }

如果直接在浏览器中加载结果,会发生什么情况<代码>http://example.com/jsontest.php?acct=1您的PHP文件是否有关闭标签?控制台是否记录了意外字符是什么?您必须查看输出。我们无法猜测您的代码是做什么的。@JoePasq在一个纯PHP文件中,绝对不需要关闭
?>
PHP标记。事实上,我建议最好的做法是不包含它,以避免在不应该包含它的地方出现游离的空白。如果直接从浏览器加载,我会得到正确的信息。尝试过。。同样的结果。如果这有助于我获得第4行jquery.js上的错误,那么另一个问题可能是您的PHP代码没有发送正确的JSON,这意味着jquery无法将传入数据识别为正确的JSON,$.getJSON()方法失败,但我不明白,JSON似乎是有效的。是的,实际上有时问题是我们没有收到正确的JSON头,这意味着“$.getJSON()”需要JSON,但它没有找到正确的头或告诉它传入数据是JSON的东西。因此,一个好的方法是将其作为文本接收,并在接收后对其进行解析。在这方面,您将使用$.ajax()并告诉它需要文本。收到数据后,使用$.parseJSON()解析数据我同意发送伪数据,但您不认为JSON是正确的,只是没有正确识别它。可能发送的标题是错误的。在我看来,将此JSON作为文本并对其进行解析会有所帮助。我同意,是的,但人们没有意识到,JSON_编码的一个方面是,它并不一定要返回有效的JSON数据——它只意味着将数组结构转换为JSON格式。在处理这个问题时,我不得不使用很多转义函数。我的方法更多的是一次解决一个问题。他说他尝试了上面的json头,所以不确定还有什么。有点不确定:)是的,我同意,但是在编辑器中通过$.parseJSON()测试JSON之后,我确信返回的JSON是准确的,唯一的问题是解释,无论如何,让我们希望@BEBO得到正确的想法。
[{"c_ID":"21","c_FirstName":"Mike","c_LastName":"Be","c_Phone":"123456789","c_ext":"0","c_fax":"0","c_address1":"","c_address2":"","c_city":"","c_state":"","c_zip":"0","c_country":"Account","c_Email":"mike.be@test.com","c_Mobile":"123456789","c_company":"TEST"}]
var JSON = '[{"c_ID":"21","c_FirstName":"Mike","c_LastName":"Be","c_Phone":"123456789","c_ext":"0","c_fax":"0","c_address1":"","c_address2":"","c_city":"","c_state":"","c_zip":"0","c_country":"Account","c_Email":"mike.be@test.com","c_Mobile":"123456789","c_company":"TEST"}]';

var parsed = $.parseJSON(JSON);

console.log(parsed);
echo json_encode(array(array('name' => 'Joe'))); 
    complete: function(data) {
        var jsonRes = null;
        try {
            jsonRes = JSON.parse(data.responseText);
        }
        catch(e) {
            jAlert('Invalid JSON object);
        }
        if (jsonRes===null || jsonRes.result===undefined) {
            jAlert('Invalid Ajax response structure');
        }
    }