2013-05-14 25 views
6

Tôi có hai loại kết quả JSON:jQuery mỗi chức năng cho các yếu tố duy nhất và nhiều

{ 
"person":{ 
    "fname": "Homer", 
    "lname": "Simpson" 
    } 
} 

{ 
"person":[ 
    { 
    "fname": "Homer", 
    "lname": "Simpson" 
    }, 
    { 
    "fname": "Marge", 
    "lname": "Simpson" 
    } 
    ] 
} 

Tôi muốn sử dụng một jQuery "mỗi":

$.each(response.person, function(i, person){... 

nhưng "i" và "người "khác khi JSON có một so với nhiều người. Tôi thấy phản ứng người duy nhất không có các mảng "[]", nhưng khi tôi:

$.each([response.person], function(i, person){... 

thì nhiều người không hoạt động. Tôi đang tìm cách bình thường hóa mọi thứ để tôi có thể sử dụng "từng" một cách nhất quán.

+0

Có cách nào để bạn có thể thay đổi cách các kết quả được tạo ra? –

+0

Đây có phải là phản hồi từ YQL không? yql thực hiện điều này với một kết quả so với đa. –

Trả lời

4

Kiểm tra xem đó có phải là mảng hay không.

$.each(($.isArray(response.person) ? response.person : [response.person]), function(i, person){... 

hoặc bạn có thể sửa đổi các đối tượng trước khi lặp đi lặp lại:

if (!$.isArray(response.person)) { 
    response.person = [response.person]; 
} 
$.each(response.person, function(i, person){... 
+0

công trình này tuyệt vời, thx! – bmw0128

+1

@ bmw0128 Tôi thích giải pháp của Pills. –

+0

Tôi vừa thấy giải pháp từ Thuốc. Nó cũng tốt, nhưng tôi đã thấy Kevin đầu tiên, và tôi nghĩ chúng khá bình đẳng. – bmw0128

6

Lý tưởng nhất là bạn sẽ có một mảng trao cho bạn ban đầu, nhưng bạn luôn có thể .concat kết quả cho một mảng trống. Điều này sẽ cho phép bạn để lặp liên tục:

$.each([].concat(response.person), function(i, person){... 

http://jsfiddle.net/MtzH8/

+0

Tôi biết điều này tồn tại, rất khó để tìm thấy những gì tôi đang tìm kiếm thông qua google nhưng ở đây nó là –

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