2008-12-17 10 views
5

Ich habe ein Problem. Ich habe ein Skript erstellt, um eine Anfrage an einen internen Link zu senden, der eine Antwort zurücksendet. Dies ist, was das Skript wie folgt aussieht:jQuery JSON nicht ordnungsgemäß analysieren

jQuery.get(callUrl, function(data){ 
       console.log(typeof data); 
       jQuery.each(data.items, function(i,item){    

             console.log(i); 

           }); 
     },'json'); 

und die Antwort, dass der Server sieht zurück, wie dies sendet:

{"items":[    
    { 
    "src": "gallery_item_data_Jc4EaLP6vlwd_large.jpg", 
    "id": "83", 
    "gallery_id": "30", 
    "username": "admin" 
    }] 
} 

Mein Problem ist, wenn ich die „Daten“ seine Art zu analysieren ist immer String. Ich brauche dafür ein Objekt, damit ich es abfragen und mit meinem Skript analysieren kann. Um zum Ende des Problems zu erhalten, habe ich versucht, mein Skript zum Beispiel auf jQuery-Dokumentation Seite zu vergleichen:

http://docs.jquery.com/Ajax/jQuery.getJSON

Die Hauptunterschiede mit der Bitte auf dieser Seite und meine Bitte ist, dass es verwendet die getJSON-Methode. Als ich versucht habe, das mit der URL zu meinem Server zu verwenden, habe ich überhaupt keine Antwort erhalten. Das ist der Hauptgrund, warum ich mich für die Methode get entschieden und den Rückgabetyp als "json" angegeben habe.

Eine andere Sache, die ich ausprobiert: Ich habe die Flickr feed ausgecheckt, die das jQuery-Beispiel verwendet, um den Inhalt-Header zu suchen, der es zurückgeschickt hat, vielleicht mein Feed hatte die falsche Kopfzeile und es ist dies auf dem Flickr-Feed:

Content-Type application/x-javascript; charset=utf-8 

Dies ist genau der gleiche Header auf meinem eigenen Feed. Also bin ich verwirrt. Weiß jemand, warum das passiert?

Antwort

7

Das muss JSON Klammern haben um ihn herum, so soll es sein:

({"items":[    
    { 
    "src": "gallery_item_data_Jc4EaLP6vlwd_large.jpg", 
    "id": "83", 
    "gallery_id": "30", 
    "username": "admin" 
    }] 
}) 

Sie sollten dann in der Lage sein getJSON zu verwenden, da dies der einfachste Weg ist, um die Daten als ein Objekt zu erhalten. Sie können jedoch auch die Zeichenfolge eval() verwenden und ein Objekt zurückgeben.

+0

getJSON funktioniert möglicherweise nicht, wenn JSONP auf dem Endpunkt, den er trifft, nicht unterstützt wird. – singpolyma

+0

Das ist wahr singpolyma, Wie mache ich JSONP auf meinem internen Server unterstützt? – picardo

+0

Ich löste es, als ich eval() und umgebendes Rückkehrobjekt mit Parens verwendete. Es funktioniert jetzt auch mit getJSON. Danke Leute! – picardo

1

Haben Sie versucht, ein Objekt dieser Zeichenfolge zu erstellen, indem Sie die JavaScript-Funktion eval() aufrufen? Wenn Sie zuerst eval (data) in Ihrer Callback-Funktion aufrufen, sollte es Ihnen ein Objekt geben.

Verwandte Themen