2009-10-14 42 views
17

Tôi có một tập kết quả trả về từ một dịch vụ cung cấp cho tôi các json sauJquery Mỗi Json Object

{ 
    "ThreadCount":61, 
    "GroupList":[ 
     {"userName":"KLT","count":2687}, 
     {"userName":"KCameron","count":718}, 
     {"userName":"IRG","count":156},{"userName":"JLB","count":123},{"userName":"HML","count":121},{"userName":"SMN","count":99},{"userName":"TBridges","count":68},{"userName":"ARF","count":65},{"userName":"MarkGreenway","count":61},{"userName":"SMC","count":55},{"userName":"EMD","count":52},{"userName":"PKP","count":41},{"userName":"KBounds","count":36},{"userName":"MAN","count":33},{"userName":"LAC","count":17},{"userName":"EPS","count":17},{"userName":"CAN","count":7},{"userName":"MAJ","count":3},{"userName":"CPC","count":2}] 
} 

Tôi muốn sử dụng jquery (hoặc javascript để đưa THREADCOUNT trong một div và thêm tên người dùng và counds đến một bảng

success: function(result) { 
    $("#Unfiled").html(result.ThreadCount); 
    $.each(result.GroupList, function(user) { 
     $('#myTable > tbody').append(
      '<tr><td>' 
      + user.userName 
      + '</td><td>' 
      + user.count + 
      '</td></tr>' 
     ); 
    }); 
} 

Đối với một số lý do tôi không nhận được bất cứ điều gì trong bảng của tôi ...

Bằng cách này HTML của tôi là ở đây:

<table> 
    <tr> 
     <td> 
      Unfiled Emails: 
     </td> 
     <td id="Unfiled"> 
      -1 
     </td> 
    </tr> 
    <tr> 
     <td colspan="2"> 
      <table id="myTable" border="2" cellpadding="3" cellspacing="3"> 
      </table> 
     </td> 
    </tr> 
</table> 

Tôi biết tôi đang thiếu một cái gì đó đơn giản ...

Nhờ sự giúp đỡ của bạn trước

+0

Bạn có chắc chắn bạn nhận được phản hồi như bạn đã mô tả không? Tôi đã nhận thấy rằng bạn đã truy cập không được trả tiền -1 thay vì 61, có vẻ như máy chủ trả lại cho bạn dữ liệu sai. –

+0

Xin lỗi để đánh lừa bạn Artem ... -1 là những gì đang có trước khi ajax xảy ra. – MarkKGreenway

Trả lời

40

Bên trong hàm được cung cấp cho each, this là yếu tố hiện tại. Hãy thử điều này:

$.each(result.GroupList, function() { 
    $('#myTable > tbody').append(
     '<tr><td>' 
     + this.userName 
     + '</td><td>' 
     + this.count + 
     '</td></tr>' 
    ); 
}); 

Nếu điều đó không làm việc cho bạn, nó có thể có cái gì để làm với điều này: $('#myTable > tbody'), xem xét rằng không có yếu tố tbody. Tôi tin rằng Internet Explorer sẽ tự động tạo một trình duyệt nhưng các trình duyệt khác thì không. Kiểm tra $.support.tbody để xem liệu trình duyệt có thực hiện điều đó cho bạn hay không.

+0

Đối với giải pháp của tôi mà làm việc tôi đã sử dụng thay đổi chức năng của bạn để làm cho nó hoạt động. nhưng thay đổi html của bảng thực sự tăng tốc nó cho tôi. – MarkKGreenway

+0

@nickf 'this' đã giải quyết được sự cố của tôi – jeezyfreezy

2

Khi tôi đã sử dụng $ .each() Tôi đã sử dụng một chức năng (i, mục), trong đó i là số nguyên chỉ thị, và mục là đối tượng thực. Đó là cách the documentation cho thấy nó đang được thực hiện - phương thức này được mô tả như hàm gọi lại (indexInArray, valueOfElement).

3

Tôi nhận thấy rằng bảng của bạn không thực sự có phần tử tbody. Đây có thể là một phần của vấn đề của bạn.

$('#myTable > tbody').append..... 

<table id="myTable" border="2" cellpadding="3" cellspacing="3"> 
</table> 

Tôi cũng xin đề nghị bạn nên tạo một chuỗi trong của bạn $ .each() vòng lặp và sau đó thực hiện như sau sau mỗi vòng lặp của bạn:

$('#myTable > tbody').html(string); 

này sẽ làm giảm chi phí phụ thêm mỗi lần bạn lặp qua mảng.

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