2010-07-19 12 views
6

Ciao ragazzi domanda veloce ottengo il seguente errore 'lunghezza è nulla o non un oggetto' in IE 8, qualcuno ha qualche idea? Feedback molto apprezzato ...'length' è null o non è un oggetto? 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

Assicurarsi che il JSON è formattato correttamente. "Proprietà": "Valore" le virgolette sono necessarie. Inoltre, quale doctype stai usando? – Mark

risposta

10

Basta controllare per l'oggetto essere nullo o vuoto:

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

C'mon banda questo era lampante :-)

+0

lol penso che possa averlo risolto, controllerò indietro un pò dopo alcuni test – Scarface

+0

ps mi piace la tua foto, pittura classica – Scarface

+0

@OK fantastico! Sì, è un dipinto fantastico, anche se mi sento un po 'dispiaciuto per la povera ragazza. Immagino sempre che pianga mentre la sua sciatta di papà urla "Stai sposando il signor Arnolfini, e ** quello ** è ** quello **!" – Pointy

0

Un JSON è un oggetto, sembra che lo si tratti come un array. Ha davvero una proprietà length? Mostraci il JSON?

Potrebbe essere necessario utilizzare un for..in invece.

MODIFICA: Si può creare il JSON dalla struttura di backend in questo modo?

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

come posso mostrare il json crudo in questa funzione? – Scarface

+1

dice solo [oggetto oggetto], [oggetto oggetto], [oggetto oggetto], – Scarface

+0

quando uso alert (json); after if (json.length) { – Scarface

0

Che aspetto ha il tuo JSON restituito? Se stai restituendo un oggetto, la lunghezza potrebbe non essere definita esplicitamente, mentre se stai restituendo un array, dovrebbe essere definito automaticamente.

+0

come posso mostrare il json crudo in questa funzione? – Scarface

0

La prima cosa che viene in mente è che la lunghezza non è una proprietà di qualunque cosa sia. Qual è la variabile JSON dovrebbe essere comunque?

1

Gli oggetti JSON (restituiti da jQuery o in altro modo) non hanno una proprietà length. Avrai bisogno di iterare sulle proprietà, molto probabilmente, o conoscere la struttura e semplicemente tirare fuori ciò che si vuole:

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

In alternativa, prendere una libreria come json2 e sarete in grado di stringa i l'oggetto per uscita/debugging.

1

pop il JSON in un arco poi ritagliare e incollarlo qui in modo che possiamo vederlo:

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

con i json2.js da qui: (link per essa al fondo alla pagina) http://www.json.org/js.html

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

Usando questo, possiamo aiutarti meglio e puoi vedere quello che hai!

+0

grazie per quel segno, all'inizio, non c'è nulla perché la funzione è progettata per restituire solo nuove informazioni su un periodo di settimeout. Quando le informazioni vengono inviate, ad esempio, appare come [{"timestamp": "1279573958", "user": "dfgdfgd", "message": "t", "creator": ""}] – Scarface

+0

Quindi, c'è nessuna lunghezza Ma, se fai l'allarme (json [0] .timestamp); dovresti vedere 1279573958 nella casella di avviso. –

+0

sì, sapevo che non c'era lunghezza, ma era in qualche modo definito ogni volta tranne che sul carico quando non sarebbe così ho pensato che fosse una variabile standard javascript o qualcosa lol – Scarface

Problemi correlati