2012-05-26 66 views
6

Tôi nghĩ rằng đó là một câu hỏi rất cơ bản, nhưng tôi đã bỏ ra hàng giờ để tìm câu trả lời không may mắn, tôi đã có đối tượng json sau đây (được tạo ra bằng cách sử dụng khung chơi!)Làm thế nào để phân tích một đối tượng json bằng cách sử dụng jquery

{ 
    "preg.pregunta": [{ 
     "message":"Debes escribir una pregunta", 
     "key":"preg.pregunta", 
     "variables":[] 
    }], 
    "preg":[{ 
     "message": "validation.object", 
     "key":"preg", 
     "variables":[] 
    }] 
} 

Đây là mảnh jquery tôi mã

$.ajax({ 
    type: $target.attr('method'), 
    data: dataString, 
    url:$target.attr('action'), 
    dataType: "json", 
    beforeSend: function() { 
     //some stuff 
    }, 
    success:function(response){ 
     //some stuff 
    }, 
    error: function(response){ 
     //I want to use the json response here. 
    } 
}); 

tôi muốn để có được tất cả các bên trong preg.pregunta (messagekey giá trị)

Bất kỳ trợ giúp nào?

CẬP NHẬT: Tôi không có đủ danh tiếng để trả lời cho chính mình, đây là những gì tôi đã tìm thấy từ trước tới nay.

Ok có thể nó sẽ rõ ràng hơn hoặc tôi phải học thêm một chút nữa; Tôi thấy rằng jQuery không phân tích cú pháp phản hồi JSON đúng cách nếu nó đi kèm với lỗi HTTP (400 trong trường hợp này).

ai đó biết lý do tại sao hành vi này?

Tôi vừa kiểm tra mã này trong trình xử lý success và hoạt động hoàn hảo!

$.ajax({ 
    type: $target.attr('method'), 
    data: dataString, 
    url:$target.attr('action'), 
    dataType: "json", 
    beforeSend: function() { 
    }, 
    success:function(response){ 
    //It is working perfectly! 
    $.each(response,function(object){ //first loop of the object 
     $.each(response[object],function(values){ //looping inside arrays 
     console.log(response[object][values].key) //getting value "key" 
     console.log(response[object][values].message) //getting value "message" 
     }); 
    }) 
    }, 
    error: function(response){ 
    //nothing happens here 
    } 
}); 

CẬP NHẬT 2.

sau khi tìm kiếm khoảng 2 giờ, tôi đã tìm thấy một giải pháp đơn giản:

error: function(response){ 
//Note the jQuery.parseJSON function 
var response = jQuery.parseJSON(response.responseText); 
    $.each(response,function(object){ 
    $.each(response[object],function(values){ 
     console.log(response[object][values].key) 
     console.log(response[object][values].message) 
    }); 
    }) 
} 

Giải thích: khi sử dụng xử lý lỗi, jQuery trả về một đối tượng phức tạp mô tả lỗi , responseText chứa dữ liệu được truy xuất từ ​​máy chủ, vì vậy, bạn phải phân tích cú pháp bằng cách sử dụng hàm parseJSON.

Hy vọng điều này sẽ hữu ích!

Trả lời

2

Hãy thử điều này:

error: function(response) { 
    var pregunta = response["preg.pregunta"][0].message; 
    var key = response["preg.pregunta"][0].key; 
}, 

Nếu có nhiều giá trị trong mảng preg.pregunta, bạn sẽ cần phải lặp và thay thế [0] với biến iterating của bạn.

Ngoài ra, tôi không hiểu tại sao bạn chỉ muốn truy cập phản hồi trong trình xử lý error?

Cuối cùng, mã để truy cập JSON là javascript gốc. Điều này là do khi bạn nhận được phản hồi, nó đã được chuyển đổi thành một đối tượng POJS, không cần jQuery.

+0

Xin chào! Tôi đã thử nó trước khi không thành công, "phản ứng ['preg.pregunta'] là không xác định" –

+0

Bạn thấy gì trong giao diện điều khiển khi bạn thử những điều sau đây: 'console.log (response);'? –

+0

Hi Rory, câu trả lời của tôi khá đơn giản; Tôi xác nhận một trường bằng cách sử dụng trình xác nhận playframework, nếu phát hiện lỗi nào (trường trống) để trả về đối tượng validation.errorsMap() được trả về dưới dạng JSON để tôi có thể sử dụng nó sau này, phản hồi này trả về bằng một HTTP 400' ... vậy đó là lý do tại sao tôi bắt nó với trình xử lý 'error'. –

Các vấn đề liên quan