2012-02-09 40 views
29

EDIT: Tôi đã nhận được huy hiệu "câu hỏi nổi tiếng" với câu hỏi này, vì vậy tôi figured tôi muốn trở lại với nó và dính những gì đã xảy ra với tôi ngay tại đầu rất tippy cho những người tìm kiếm nó để có được một câu trả lời ngay lập tức.jQuery.getJSON và jQuery.parseJSON trả về [đối tượng đối tượng]?

Về cơ bản, tôi mới sử dụng JSON. JSON là một đối tượng (rõ ràng), vì nó chứa tất cả các loại công cụ! Vì vậy, tôi đã được như "Hey, javascript, chỉ cần bật lên một cảnh báo với tất cả các dữ liệu JSON này", hy vọng nó sẽ cho tôi dữ liệu JSON như là một chuỗi. Nhưng javascript không làm điều đó (tốt!), Vì vậy nó giống như "Này, đây là cách chúng ta hiển thị các đối tượng, [đối tượng Object]".

Những gì tôi có thể làm là một cái gì đó như alert(obj.DATA[0][1]) và nó sẽ cho tôi thấy rằng bit của đối tượng.

Điều tôi thực sự muốn là xác minh rằng tôi đang tạo dữ liệu JSON tốt, mà tôi có thể đã kiểm tra với JSON.stringify.

Dù sao, hãy quay lại câu hỏi thường xuyên được lên lịch của chúng tôi!


Tôi đang cố gắng lấy một số dữ liệu JSON có cuộc gọi ajax, nhưng jQuery dường như không thích JSON của tôi.

nếu tôi làm điều gì đó như:

function init2() { 
    alert("inside init2"); 
    jQuery.ajax({ 
     url: "/Mobile_ReportingChain.cfm", 
     type: "POST", 
     async: false, 
     success: function (data) { 
      alert(data); 
      var obj = jQuery.parseJSON(data); 
      alert(obj); 
     } 
    }); 
} 

tôi có được điều này, kể từ alert (dữ liệu):

{"COLUMNS":["MFIRST_NAME","MLAST_NAME","MMDDL_NAME","MEMPLY_ID","MAIM_NBR","EMPLY_ID"], 
    "DATA":[ 

["FNAME1   ","LNAME1     ","MI1    ","000-14-7189","026-0010","000-62-7276"]  

,["FNAME2   ","LNAME2     ","MI2    ","000-01-2302","101-1850","000-14-7189"] 

,["FNAME3   ","LNAME3     ","MI3    ","000-91-3619","102-1000","000-01-2302"]  

,["FNAME4   ","LNAME4     ","MI4    ","000-25-9687","102-1000","000-91-3619"] 

]} 

mà JSONLint nói là json hợp lệ. alert (obj) mang lại cho tôi này, tuy nhiên:

[object Object] 

thêm dataType: "json" hoặc "text json" chỉ làm cho nó thông báo [object Object] tại alert(data).

Tôi thực sự muốn tìm hiểu điều này, có ai biết tại sao nó làm việc này không? Tôi khá mới ở jQuery, mục tiêu của tôi là lấy một mảng cho mỗi cột. Mã tôi đang sử dụng đã làm việc trên một trang khác, có vẻ như điều làm tôi phiền lòng nhất.

+1

Bạn đang chuyển đổi nó vào một đối tượng và sau đó gọi cảnh giác với đối tượng đó. Sau đó nó nói hey đây là một đối tượng. Tất cả mọi thứ đang làm việc như nó nên :) –

Trả lời

32

Chức năng alert() chỉ có thể hiển thị một chuỗi văn bản. Là tham số duy nhất của nó, nó lấy một chuỗi hoặc một đối tượng. Tuy nhiên, đối tượng sẽ được chuyển thành chuỗi có thể được hiển thị.

Khi tìm nạp JSON qua jQuery, phương thức $.ajax() sẽ tự động phân tích cú pháp JSON và biến nó thành đối tượng JavaScript cho bạn. Biến số data của bạn là có đối tượng JavaScript và không phải là chuỗi JSON như mong đợi.

alert() chỉ có thể hiển thị chuỗi khi cố gắng cảnh báo đối tượng data của bạn, đối tượng của bạn sẽ được biến thành biểu diễn chuỗi. Biểu diễn chuỗi của đối tượng JavaScript là [object Object].

Để gỡ lỗi, bạn có thể sử dụng console.log(data) để thay thế. Sau đó, bạn có thể kiểm tra đối tượng và nội dung của đối tượng thông qua bảng điều khiển trong công cụ nhà phát triển trình duyệt của bạn.

function init2() { 
    jQuery.ajax({ 
     url: "/Mobile_ReportingChain.cfm", 
     type: "POST", 
     dataType: "json", 
     async: false, 
     success: function (data) { 
      console.log(data); 
     } 
    }); 
} 

Nếu bạn vì một lý do vẫn muốn thông báo với các JSON-dữ liệu, sau đó bạn sẽ phải bật đối tượng data của bạn trở lại thành một JSON-chuỗi. Để làm điều đó bạn có thể tận dụng JSON.stringify:

alert(JSON.stringify(data)); 
+0

Đó là nhanh chóng, và tôi cảm thấy ngớ ngẩn. Cảm ơn tất cả mọi người, bạn là người nhanh nhất và đã cho tôi thông tin về console.log (dữ liệu), vì vậy bạn giành được câu trả lời! – Rob

+1

@Rob Chúng tôi học điều gì đó mới mỗi ngày! –

+0

Sau khi tìm kiếm 1000 giải pháp này đã làm việc! CẢM ƠN! – Nopzen

2

Đây là cách nó là nghĩa vụ phải làm việc. JSON của bạn trở thành đối tượng javascript. Sau đó, bạn có thể thao tác đối tượng đó dưới dạng đối tượng javascript thông thường. Ví dụ:

data.COLUMNS chẳng hạn sẽ trả về một mảng.

10

nó muốn một chuỗi

var obj = $.parseJSON(JSON.stringify(data)); 
+0

Điều này đã giúp tôi với một vấn đề riêng biệt. cảm ơn! : D –

2

[object Object] là chuỗi đại diện của một đối tượng javascript.

Thử truy cập các thuộc tính của đối tượng.

alert(data.COLUMNS[0]); 
4

thử gửi đối tượng đó đến console.log. Bạn sẽ nhận được một bức tranh rõ ràng hơn những gì nó chứa.

Ngoài ra, hãy đặt dataType: 'json' và xóa parseJSON vì tất cả đều giống nhau.

+0

Vâng, một khi tôi biết rằng tôi đã nhận được JSON đúng cách, tôi đã thay thế nó bằng $ .getJSON. – Rob

2

jQuery.parseJSON sẽ chuyển đổi chuỗi json thành đối tượng json để cảnh báo (obj) sẽ hiển thị cho bạn [object Object] vì nó là một đối tượng.

Nếu bạn muốn xem những gì obj chứa sau đó sử dụng console.log(obj) và sau đó kiểm tra thông báo nhật ký bảng điều khiển.

0

$.getJSON("UI/entidades.json.php", function(data){ 
 
\t result = JSON.stringify(data); 
 
\t alert(result) 
 
\t console.log(result) 
 
})

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