2012-08-10 114 views
1

的script.js使用jQuery JSON對象

$('#loginform').submit(function(e){ 
    $.ajax({ 
     type:"POST", 
     url:"/accounts/login/ajax/", 
     data:$('#loginform').serialize(), 
     success: function(msg){ 
      var msg = msg; 
      msg = JSON.parse(msg); 
      $('#messagestatus').html(''); 
      if(msg.username != null){ 
       $('#messagestatus').append(msg.username); 
      } 
      if(msg.password != null){ 
       $('#messagestatus').append(msg.password); 
      } 
     } 
    }); 
    e.preventDefault();    
}); 

返回的對象

{'username':['Required'],'password':['Required']} 

當我使用JSON.parse,我警告,它顯示正確的錯誤,但是當我追加到messagestatus div它沒有響應,請幫助。

+3

什麼是'var msg = msg;'? – Musa 2012-08-10 21:51:18

+0

http://jsonlint.com/抱怨'{'username':['Required'],'password':['Required']}'不是有效的JSON。第一行解析錯誤:{'username':[----- ^期望'STRING','}''用''替換'''JSON將是有效的。 – Nope 2012-08-10 21:59:58

回答

2

你的用戶名和密碼是在您的json.Either陣列使你的JSON看起來像

{'username':'Required','password':'Required'} 

或者改變你的腳本:

if(msg.username.length > 0) 
    { 
     $('#messagestatus').text(msg.username[0]); 
    } 
    if(msg.password.length > 0) 
    { 
     $('#messagestatus').text(msg.password[0]); 
    } 
+0

但我該如何檢查用戶名是否存在? – Abhimanyu 2012-08-11 09:54:06

+0

在第一個if和if之前添加if(typeof msg.username!='undefined')' typeof msg.password!='undefined')'在第二個if之前 – Vlad 2012-08-11 15:46:41

1

可能是顯著,也許不是,但你的json對象實際上由子數組組成:

{'username':['Required'],'password':['Required']} 
      ^----------^   ^----------^ 

這意味着解碼後的數據結構在JS中實際上是

obj['username'][0] and  obj['password'][0] 
+1

它的鍵值也是'''而不是'''。 – 2012-08-10 21:55:26

+0

msg ['username] [0],不起作用 – Abhimanyu 2012-08-11 09:23:34

0

首先,參數不需要在它們的函數中重新聲明。

然後,使用$ .parseJSON()來解析您的JSON:

msg = $.parseJSON(msg); 

你的JSON包含陣列,使用味精[ 「用戶名」] [0]進入第一個字符串,而不是全陣列。

而我會把e.preventDefault();作爲AJAX之前的第一個聲明。

和.html('')=> .empty()但它是相同的結果。