未捕获的SyntaxError:JSON.parse(<anonymous>)位置0的JSON中出现意外的标记a

时间:2017-05-11 08:29:38

标签: javascript jquery json ajax

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

我创建了一个登录页面,我使用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 ......

2 个答案:

答案 0 :(得分:2)

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

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

result.users_active已经是一个JavaScript对象(或数组),或者可能是一个不代表JSON对象的String,因此解析将导致语法错误,如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

答案 1 :(得分:1)

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');