2016-09-02 169 views
0

我有这样的脚本:如何遍历JSON?

<script> 
    function postForm() { 
     $.post("rest/login", $("#myform").serialize()).done(function(data) { 

      if(data.status === "OK"){ 
       window.location.replace("coursesform.jsp"); 
       alert(data); 
      } 
      else alert (data.status); 

       //alert("Invalid credentials. Please use the same username and password you'd use for a SoCS machine."); 
     }); 
    } 
</script> 

我改变什么的登录API从简单的输出这个带回:

{"status":"OK"} 

到输出的用户ID,以及:

{"status":"{au:true, id:testtutor}"} 

如何我可以提取“真实”和“testtutor”吗?

我尝试这样做:

var obj = JSON.parse(status.data); 

所以我可以做obj.au但我收到此:

不过,我收到此浏览器:

VM701:1 Uncaught SyntaxError: Unexpected token u in JSON at position 0 
+4

'{“status”:“{au:true,id:testtutor}”}'很奇怪。它是具有单个属性“status”的对象的JSON表示法,其值是一个字符串。更正常的版本是'{“status”:{“au”:true,“id”:“testtutor”}}',它是一个带有属性'status'的对象,其值是一个对象两个属性“au”和“id”,它们的值分别为“true”和“testtutor”。因此,处理这些值的第一步是以易于使用的格式输出它们。 –

+0

不应该'status.data'是'data.status'? – Barmar

+1

问题似乎在控制器中,它不会生成正确的JSON。我怀疑你试图手工创建JSON,并且做错了,而不是使用库函数。 – Barmar

回答

0
{"status":"{au:true, id:testtutor}"} 

删除“周围{au:true,id:testtutor}, 使其成为

{"status":{au:true, id:"testtutor"}} 

然后,你就可以通过status.id

你得到一个错误,因为"{au:true, id:testtutor}"是不是必须{"au":true, "id":"testtutor"}一个有效的JSON度日status.au和id太子港,但你不能这样做是因为你已经有了“围绕它。

0

您的API没有返回有效的JSON,或者至少不是您所期望的。你的钥匙应该在JSON字符串,所以你应该返回类似:

{ 
    "status": { 
    "au": true, 
    "id": "testtutor" 
    } 
} 

...这JSON.parse()将能够解析。