【问题标题】:SyntaxError: JSON.parse: unexpected characterSyntaxError:JSON.parse:意外字符
【发布时间】:2013-11-06 22:30:53
【问题描述】:

我有一个无法调试的 JSON 解析错误。代码如下:

$(document).on('submit', '#confirmreset', function(event) {
    event.preventDefault();

    var action_url = $(this).attr("action");
    alert_box_register("Resetting password...");
    console.log(action_url);
    var postData = $(this).serializeArray();
    console.log(postData);

    $.post(action_url, postData, function(data) {
        console.log(data);
        var obj = $.parseJSON(data);

        alert_box_register(obj.message);
    });
});

还有 JSON:

{
    "status": "success",
    "message": "A temporary password has been emailed to you."
}

在 Firefox 中错误是“SyntaxError: JSON.parse: unexpected character”,在 Chrome 中是“Uncaught SyntaxError: Unexpected token C”

有什么想法吗?

*编辑:这适用于我的本地主机设置。 *

【问题讨论】:

  • 这是有效的 JSONaspresented,所以我怀疑 real JSON 数据包含一个在翻译过程中没有出现的字符。
  • json是如何生成的?
  • 你在哪里打电话JSON.parse
  • 它发生在$.parseJSON(data),但我相信你知道。
  • 不要解析回调里面的json。相反,告诉 jquery 它是 json。 $.post(action_url, postData, function(data){...}, "json") 如果你的成功停止工作,这意味着你的服务器没有返回有效的 json。

标签: javascript jquery json


【解决方案1】:

如果服务器正在发送有效的 JSON,则不需要调用 $.parseJSON,因为 jQuery 会在检索响应时自动解析它。我不知道确切的标准,但如果您设置 Content-type: application/json 标头,它肯定会。

【讨论】:

  • 谢谢,所以你建议只使用 'var obj = $(data);'
  • 不,只是var obj = data,甚至function (obj) { -- 基本上data 可以立即使用
  • 这会创建对象 {status: "error", message: Array[1]} (index):241 Uncaught SyntaxError: Unexpected token o
  • @alias51 这意味着您的服务器没有返回有效的 json。
  • 谢谢。正在寻找答案,事实证明这也是我的问题。试图解析已经解析的数据。因为它是在使用 json 作为类型或 getJSON 作为方法时预先解析的。
【解决方案2】:

此错误可能是由于对字符串使用单引号 (') 而不是双引号 (") 引起的。

JSON spec 要求字符串使用双引号。

另见:

https://stackoverflow.com/a/14355724/1461850

【讨论】:

    【解决方案3】:
    1. 只放这些=>

      dataType: 'text', // 期望从 PHP 脚本返回什么,如果有的话 缓存:假, 内容类型:假, 处理数据:假,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-13
      • 1970-01-01
      • 1970-01-01
      • 2014-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多