2012-08-10 66 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()但它是相同的结果。