2011-04-14 62 views
0

有谁知道为什么我无法访问生成的json数组中的数组键。基本上,我正在做一个阿贾克斯电话,然后成功,做另一个。一切工作正常,我得到一个完整的,健康的和有效的JSON数组返回,但我无法访问键和值。运行嵌套AJAX请求时无法访问json数组元素

我的jQuery

$("#register-form").submit(function(e){ 
    e.preventDefault(); 
    var firstname = $('#regfirstname').val(); 
    var surname = $('#regsurname').val(); 
    var email = $('#regregemail').val(); 
    var password = $('#regregpassword').val(); 
    var band = $('#regband').val(); 
    var website = $('#regwebsite').val(); 
    var company = $('#regcompany').val(); 
    var address = $('#regaddress').val(); 
    var city = $('#regcity').val(); 
    var state = $('#regstate').val(); 
    var postcode = $('#regpostcode').val(); 
    var country = $('#regcountry').val(); 
    var phone = $('#regphone').val(); 
    var age = $('#regage').val(); 
    var subscribe = $('#regsubscribe').val(); 
    $.ajax({ 
    type : 'POST', 
    url : '/ajax/register', 
    data : 'firstname='+firstname+'&surname='+surname+'&email='+email+'&password='+password+'&band='+band+'&website='+website+'&company='+company+'&street='+address+'&city='+city+'&state='+state+'&postcode='+postcode+'&country='+country+'&phone='+phone+'&age='+age+'&subscribe='+subscribe, 
    success : function(data){ 
     // automatically log the user in 
     $.ajax({ 
     type : 'POST', 
     url : '/ajax/login', 
     data : 'email='+email+'&password='+password, 
     success : function(user){ 
      alert(user.logged_in); 
     }, 
     datatype : 'json' 
     }); 
    }, 
    datatype : 'json' 
    }); 
}); 

如果我做alert(user);它会提醒整个JSON数组。但只要我尝试访问其中的值,它就会返回undefined。

例JSON数组:

{"logged_in":true,"firstname":"Joe","surname":"Bloggs","Full_name":"Joe Bloggs","email":"[email protected]","phone":"123456789","website":"www.site.com.au","age":"25","street":"1 Road Street","city":"Town","state":"BLA","postcode":"1234","country":"13","company":"Freedman Electronics","band":"Daysend","subscribe":"2","mics":0} 

任何想法?

这甚至有可能吗? (AJAX中的AJAX我的意思是)。

+0

当你说警报(用户)显示了整个JSON数组,你的意思是它显示: {“LOGGED_IN”:真实的,“名字”:“乔”,“姓”:“布罗格斯”,... 因为它应该显示:[对象] - '用户'参数是由字符串填充而不是json对象? – 2011-04-14 05:50:10

+0

是的,没错,它输出整个阵列。 – dangermark 2011-04-14 05:51:24

+0

这不是您的问题的答案,但如果注册成功,为什么不用第一个reuqest登录用户?这样你有两个请求,这是较慢的。 – dioslaska 2011-04-14 06:02:00

回答

2

使用的dataType,而不是数据类型,在你的Ajax设置下面的代码。区分大小写。

+0

那么。我感到很蠢:P。感谢那。有效。 – dangermark 2011-04-14 06:18:37

+0

我完全错过了显而易见的。 +1 – 2011-04-14 06:21:10

0

这个问题似乎在于你的/ ajax/login页面 - 响应被作为字符串返回,而不是json对象。例如以下:

<script type="text/javascript"> 
var test = {"logged_in":true,"firstname":"Joe","surname":"Bloggs","Full_name":"Joe Bloggs","email":"[email protected]","phone":"123456789","website":"www.site.com.au","age":"25","street":"1 Road Street","city":"Town","state":"BLA","postcode":"1234","country":"13","company":"Freedman Electronics","band":"Daysend","subscribe":"2","mics":0}; 

alert(test); 
</script> 

显示:

[object Object] 

如果你的情况,登录页面返回以下警报(用户):

{"logged_in":true,"firstname":"Joe","surname":"Bloggs","Full_name":"Joe Bloggs","email":"[email protected]","phone":"123456789","website":"www.site.com.au","age":"25","street":"1 Road Street","city":"Town","state":"BLA","postcode":"1234","country":"13","company":"Freedman Electronics","band":"Daysend","subscribe":"2","mics":0} 

那么你要么需要调试来自登录页面的输出ContentType(最好),或者做类似:

var jsonuser = JSON.parse(user); 
alert(jsonuser.logged_in); 
0

尝试下载json2.js,并在您的应用程序

添加它,并尝试在成功块

success : function(user){{ 
     var response=eval("("+JSON.stringify(user)+")"); 
     alert(response.logged_in); 
     alert(response.firstname); 
},