【问题标题】:parseJSON error: unexpected character at line 1 column 2 of the JSON dataparseJSON 错误:JSON 数据的第 1 行第 2 列出现意外字符
【发布时间】:2016-03-08 10:52:10
【问题描述】:

我有一个这样的 PHP 脚本:

$STL = array();
$filter = array();
$filter['sort_by'] = "date_added";
$filter['sale'] = "F";
$filter['per_page'] = "12";
$STL['filter'] = $filter;
echo json_encode($STL);

这给出了以下输出:

{"filter":{"sort_by":"date_added","sale":"F","per_page":"12"}}

我正在尝试像这样使用 parseJSON:

$.ajax({ 
    url: 'myPHP.php',
    type: 'post',
    data : get_session,
    async: false,
    dataType: 'json',
    success: function(result) {
        var json = $.parseJSON(result);         
    } 
});

但我得到以下结果:

SyntaxError:JSON.parse:JSON 数据的第 1 行第 2 列出现意外字符

我猜 json 字符串在 PHP 中的格式不正确。我做错了什么?

【问题讨论】:

    标签: php jquery json ajax


    【解决方案1】:

    当您指定dataType: 'json'(或jQuery 检测到JSON 响应)时,它会自动为您解析JSON。如果您随后尝试再次解析生成的对象,则会收到您所看到的错误。 success 函数的 result 参数已经是您可以使用的对象。

    另外请注意,您应该永远使用async: false。使用它是一种可怕的做法,因为它会阻塞 UI 线程,直到 AJAX 请求完成。这在用户看来就像浏览器崩溃了。从设置中删除该属性,并将所有依赖于 AJAX 结果的代码放在 success 处理程序中。

    试试这个:

    $.ajax({ 
        url: 'myPHP.php',
        type: 'post',
        data : get_session,
        dataType: 'json',
        success: function(result) {
            console.log(result);      
        } 
    });
    

    【讨论】:

    • 啊,我明白了!菜鸟错了我那里。太好了,谢谢罗里。
    【解决方案2】:

    如果您已经在成功回调中使用$.parseJSON(result),则从AJAX 属性中删除dataType: 'json',。或者使用另一种方式,保留dataType: 'json',因为您已经期望JSON 作为结果并删除$.parseJSON(result)。只使用其中一个。

    【讨论】:

      【解决方案3】:

      错误
      SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data
      当您的 json 对象无效时发生。对于这种情况,您可以通过 jsonlint
      检查您的 json 但是对于这种情况,由于在您的 ajax 请求中使用了dataType: 'json',您的输出已经是 josn 的解析结果

      {"filter":{"sort_by":"date_added","sale":"F","per_page":"12"}}

      $.parseJSON(result) 将字符串转成 JSON
      您的请求响应已经是有效的 JSON,所以 $.parseJSON(string) 返回错误

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-26
        • 2017-05-18
        • 2016-11-19
        • 2014-11-02
        • 1970-01-01
        相关资源
        最近更新 更多