2017-10-21 82 views
0

我有我的成功函数(AJAX)与解析JSON的问题。 我现在开始正确地学习json,但我根本无法得到这个工作。笨 - jQuery的阿贾克斯 - 解析JSON收到从AJAX调用

我有这样的jQuery函数提交数据:

$("#loginForm").on('submit', function(form) 
{ 
    form.preventDefault(); 
    var tdata= $("#loginForm").serializeArray(); 
    var that = $(this), 
    data = tdata; 

    $.ajax({ 
     url: that.attr('action'), 
     type: 'POST', 
     data: data, 

     success: function(data){ 

      alert(data["error"]["email"]); 
     }, 
     error: function(){ 
      alert(data["error"]["email"]); 
     } 
    }); 

}); 

在控制器我有这样的:

$this->load->library('form_validation'); 
     $this->form_validation->set_rules('email', 'Email', 'required|valid_email|trim|xss_clean'); 
     $this->form_validation->set_rules('password', 'Password', 'required'); 
..... 
$arrReturnData['error'] = $this->form_validation->error_array(); 
echo json_encode($arrReturnData); 

在Firefox中,当我跟踪请求,得到的字符串是:

{"error":{"email":"The Email field is required.","password":"The Password field is required."}} 

但我不能解析它:(我不知道怎么了,我花了3个多小时只是在此看齐吨。一切正常,我无法解析这一点。

我想这样的:

data.error["email"] 

data[0]["email"] 

,但未能得到该电子邮件的错误消息。请帮助:)

+0

检查https://stackoverflow.com/a/4935684/2275490和相关 – Vickel

+0

它应该工作,只要你有相同的JSON回到成功回调。什么是响应内容类型?它是文本还是'application/json'? – Shyju

+0

当我使用警报(数据)时,我得到[对象对象],[对象对象],[对象对象]。如果我使用obj = JSON.parse(data); alert(obj.error);我得到的错误“JSON.parse:在JSON数据线1列2意外的字符” – BlasterGod

回答

0

我找到了一个解决方案。我无法设法使用数据变量。 我做了什么,是修正误差函数(jQuery的AJAX)是这样的:

error: function(request, status, error){ 
       var json=request.responseText; 
       obj = JSON && JSON.parse(json) || $.parseJSON(json); 
       alert(obj.error.email); 

      } 

所以我用request.responseText的JSON.parse。 现在我可以成功地使用obj.error.email