【问题标题】:Javascript JSON.parse: unexpected character error [duplicate]Javascript JSON.parse:意外字符错误[重复]
【发布时间】:2013-06-08 18:54:30
【问题描述】:

我想从 php 脚本中获取一个字符串,并将其解析为一个 javascript 数组。但得到了错误:SyntaxError: JSON.parse: unexpected character for the line :JSON.parse(msg);

我搜索了很多,无法弄清楚我的问题在哪里,请帮我检查一下。谢谢。

PHP端:

header("application/json; charset=utf-8");
$sum = array(1,2,3,4,5);
echo json_encode($sum);

Javascript:

$.ajax({
    type: "POST",
    url: "save.php",
    contentType: "application/json; charset=utf-8",
    data: price,
    success: function (msg) {
        var i = 0;
        console.log(msg);
        var sum = new Array();
        sum = JSON.parse(msg);
        $('input.hj').each(function () {
            if (sum[i] > 0) {
                $(this).val(sum[i]);
            }
            i++;
        });
    }
});

【问题讨论】:

  • 看看console.log(msg);的输出。它是一个对象还是一个字符串?如果它是一个对象,你不必也不能解析它。
  • @FelixKling 它是这样的字符串:[1,2,3,4,5] 我想将其解析为数组
  • console.log(typeof msg); 是否也显示 string
  • @FelixKling 如果我放 header("Content-type: application/json; charset=utf-8");在 php 中,成功函数不起作用。如果我删除该标题,则消息类型为字符串

标签: php javascript json


【解决方案1】:

不要解析它:$.ajax 为你解析了它。只需使用提供给success 回调的参数,这是解析后的数组。

如果您的浏览器无法检测到它是 JSON,请添加 dataType 参数。

还请注意,您不必自己管理 i 计数器:一个由 each 传递:

dataType: 'json',
success: function(sum){
    $('input.hj').each(function(i){
        if (sum[i] > 0) {
            $(this).val(sum[i]);
        }
    });
}

【讨论】:

  • 没有解析,我得到的值是这样的字符串 "[1,2,3,4,5]" 它输出 "[" "1" ",", .....不是我想要的。谢谢
  • 您是否还修复了 Marcelo 注意到的 PHP 中的错误标头?您的浏览器似乎无法检测到它是 JSON。
  • 当然,还要设置 dataType 参数。
  • 我修复了这样的标题 header("Content-type: application/json; charset=utf-8");那么success函数就不起作用了,没有控制台输出。
【解决方案2】:

没有必要解析它。此外,在您的 PHP 脚本中,您的 header 应该是:

header("Content-type: application/json; charset=utf-8");

在你的 JS 中,如果price 是一个字符串(或浮点数或整数),则无需将其作为 json 发送。为简单起见,您可能需要删除contentType: "application/json; charset=utf-8",

【讨论】:

  • 这不是多余的。 contentType 选项指定发送到服务器的数据格式。当然如果price不是JSON,那么header就是错误的,但那是另外一个原因。
  • @FelixKling 你是对的,如果它发送一个 JSON 并不是多余的。事实并非如此。我会编辑。
猜你喜欢
  • 2012-01-21
  • 2014-04-17
  • 2012-01-28
  • 2013-06-02
  • 2013-12-02
  • 2012-03-30
  • 2014-09-08
相关资源
最近更新 更多