2010-07-19 42 views
6

Câu hỏi nhanh của các bạn, tôi nhận được lỗi sau 'độ dài là null hoặc không phải là một đối tượng' trong IE 8, bất kỳ ai có ý tưởng nào? Phản hồi được đánh giá rất cao ...'chiều dài' là null hay không phải là một đối tượng? IE 8

function refresh() { 
$.getJSON(files+"handler.php?action=view&load=update&time="+lastTimeInterval+"&username="+username+"&topic_id="+topic_id+"&t=" + (new Date()), function(json) { 
    if(json.length) { 
     for(i=0; i < json.length; i++) { 
     $('#list').prepend(prepare(json[i])); 
     $('#list-' + count).fadeIn(1500); 
     } 
     var j = i-1; 
     lastTimeInterval = json[j].timestamp; 
    } 
    }); 

} 
+0

Hãy chắc chắn rằng JSON của bạn được định dạng đúng. "Thuộc tính": "Giá trị", dấu ngoặc kép là cần thiết. Ngoài ra, bạn đang sử dụng loại tài liệu nào? – Mark

Trả lời

10

Chỉ cần kiểm tra cho đối tượng là null hoặc rỗng:

if (json && json.length) { 
    // ... 
} 

C'mon băng đảng này là :-) cách rất rõ ràng

+0

lol Tôi nghĩ rằng có thể đã cố định nó, tôi sẽ kiểm tra lại sau một vài thử nghiệm – Scarface

+0

ps Tôi thích ảnh của bạn, bức tranh cổ điển – Scarface

+0

@OK tuyệt vời! Vâng, đó là một bức tranh tuyệt vời, mặc dù tôi cảm thấy có chút tiếc cho cô gái tội nghiệp. Tôi luôn luôn tưởng tượng cô ấy khóc trong khi tiếng thét của một người cha hét lên, "Bạn đang cưới anh Arnolfini, và ** cái đó ** là **!" – Pointy

0

JSON là một đối tượng, bạn dường như coi nó như một mảng. Nó thực sự có một tài sản length? Hiển thị cho chúng tôi JSON?

Thay vào đó, bạn có thể cần phải sử dụng số for..in.

EDIT: Bạn có thể tạo JSON từ cấu trúc phụ trợ như vậy không?

({ 
    "foo": [] 
}) 
+0

làm thế nào tôi có thể hiển thị json thô trong chức năng này? – Scarface

+1

nó chỉ nói [Object Object], [Object Object], [Object Object], – Scarface

+0

khi tôi sử dụng alert (json); sau nếu (json.length) { – Scarface

0

JSON trả về của bạn trông như thế nào? Nếu bạn đang trả về một đối tượng, chiều dài có thể không được xác định rõ ràng, trong khi nếu bạn đang trả về một mảng, nó sẽ được xác định tự động.

+0

Tôi làm cách nào để hiển thị json thô trong chức năng này? – Scarface

0

Điều đầu tiên xuất hiện trong đầu là chiều dài không phải là tài sản của bất kỳ json nào. Biến json được cho là gì?

1

Đối tượng JSON (được trả về bởi jQuery hoặc cách khác) không có thuộc tính length. Bạn sẽ cần phải lặp qua các thuộc tính, nhiều khả năng, hoặc biết cấu trúc và chỉ cần kéo ra những gì bạn muốn:

$.getJSON(..., ..., function(json) { 
    for(var prop in json) { 
    if(!json.hasOwnProperty(prop)) { return; } 
    alert(prop + " : " + json[prop]); 
    } 
}); 

Ngoài ra, lấy một thư viện như json2 và bạn sẽ có thể stringify đối tượng cho đầu ra/gỡ lỗi.

1

bật JSON trong một khoảng thời sau đó cắt và dán nó ở đây vì vậy chúng tôi có thể nhìn thấy nó:

<span id="JSObject2">empty</span> 

với json2.js từ đây: (liên kết cho nó ở dưới cùng của trang) http://www.json.org/js.html

myJSON = JSON.stringify(json); 
$('#JSObject2').text(myJSON); 

Bằng cách đó, chúng tôi có thể giúp bạn tốt hơn và bạn có thể thấy những gì bạn có!

+0

cảm ơn cho nhãn hiệu đó, lúc bắt đầu, không có gì bởi vì hàm được thiết kế để chỉ trả về thông tin mới trong một khoảng thời gian định sẵn. Khi thông tin được gửi, có vẻ như đây là ví dụ [{"dấu thời gian": "1279573958", "người dùng": "dfgdfgd", "thông báo": "t", "người tạo": ""}] – Scarface

+0

Vì vậy, có không có chiều dài. Nhưng, nếu bạn cảnh báo (json [0] .timestamp); bạn sẽ thấy 1279573958 trong hộp cảnh báo. –

+0

vâng tôi biết không có chiều dài, nhưng nó đã được xác định bằng cách nào đó trừ khi ofcourse tải khi nó sẽ không được như vậy tôi figured nó là một biến tiêu chuẩn javascript hoặc một cái gì đó lol – Scarface

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