【问题标题】:Uncaught SyntaxError: Unexpected token a in JSON at position 0 at JSON.parse (<anonymous>)未捕获的 SyntaxError:JSON.parse (<anonymous>) 位置 0 处的 JSON 中的意外标记 a
【发布时间】:2017-05-11 08:29:38
【问题描述】:

我知道有很多关于这个的问题,但很抱歉我真的对这个错误感到困惑......

我创建了一个登录页面,并使用 ajax 进行 POST 请求。当我使用它时会发生什么

$.ajax({
 url:'../ajax/checklogin.php',
 type:'POST',
 dataType:'JSON',
 data:$('form').serialize(),   
  success: function(result){
  $.post("../www/login.php",{ users_id: JSON.parse(result.users_id)}).done(window.location.href='../www/index.php');
  }
});

$.post 正在工作,但是当我尝试添加另一个字段来解析时,我得到了这个错误.. 错误出现在 users_active.. 出于某种原因,我不知道为什么会出现错误

$.post("../www/login.php",{ users_id: JSON.parse(result.users_id),users_active: JSON.parse(result.users_active)}).done(window.location.href='../www/index.php');

其他字段很好,但唯一给我错误的字段是 users_active.. 我什至检查了返回的 json 数组,它们是有效的 json...

【问题讨论】:

  • 为什么是JSON.parse()result 应该已经是一个对象了
  • 我使用 parse 的原因是删除 " " 使其成为字符串..
  • 如果我控制台console.log(JSON.parse(result.users_active)); 我得到了错误标题,但是当我控制台console.log(JSON.parse(result.users_id)); 而不是得到"12345" 时的users_id 结果是12345 这就是我使用解析删除的原因" " 使其成为纯字符串。
  • 你能告诉我们result的内容吗? (console.log(result);)
  • {"id":"26","users_id":"201710001","users_username":"123","users_active":"active"} 这是console.log 的结果,我刚刚删除了一些字段

标签: javascript jquery json ajax


【解决方案1】:

JSON.parse() 接受一个字符串并将其转换为一个 JavScript 对象。

你很幸运,JSON.parse("12345") 可以转换为new Number("12345"),这确实是一个整数。

result.users_active 已经是一个 JavaScript 对象(或数组)或者可能是一个不代表 JSON 对象的字符串,因此解析将导致https://www.w3schools.com/js/js_json_parse.asp 中所述的语法错误。

我假设您需要JSON.stringify(),但为了确保这一点,您应该发布一些代码或您的结果对象。 https://www.w3schools.com/js/js_json_stringify.asp

编辑:现在我已经看到了这个对象,"active" 是一个简单的字符串,你不能去掉引号。所以只需使用users_active: result.users_active

【讨论】:

  • 当我尝试使用 JSON.stringify(result.users_active) 结果是“活跃的”但我想要的是删除那些双 qoute...有没有办法删除那些? . 我使用 JSON.parse 的原因是删除那些双引号而不是导致“12345”它给我 12345.... 没有双引号..
  • 您只能从数字或布尔值中去除引号。 "active" 是一个字符串,没有引号就不能存在,因为否则它将是对名为 active 的变量的引用。
  • 哦! . 所以我对它的工作原理有任何了解.. 感谢您提供的信息...
【解决方案2】:

JSON.parse 不会删除引号 ("),而是将您的数据转换为对象、布尔值或字符串 - 如果它们之前是有效的 json(不仅仅是您传递的属性值)。请参见此处: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse

如果您想确保将整数或字符串(或任何您需要的)传递给您的 ajax 帖子,只需使用适当的 javascript 函数,例如 parseInt() 或 String()。

请参见此处的数据示例:

var result = {
  "id":"26",
  "users_id":
  "201710001",
  "users_username":"123",
  "users_active":"active"
  };

$.post("../www/login.php", { 
    users_id: parseInt(result.users_id),
  users_active: String(result.users_active) 
  }).done(window.location.href='../www/index.php');

【讨论】:

  • 哦! . 所以我知道它是如何工作的.. 谢谢你的信息
猜你喜欢
  • 2018-04-05
  • 1970-01-01
  • 1970-01-01
  • 2018-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-09
  • 2021-06-08
相关资源
最近更新 更多