2016-09-02 96 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()將能夠解析。