2008-12-17 24 views
5

Bir sorunum var. Bir yanıt gönderen bir iç bağlantıya istekte bulunmak için bir komut dosyası oluşturdum.jQuery düzgün JSON ayrıştırma değil

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

             console.log(i); 

           }); 
     },'json'); 

ve sunucu gibi görünür geri gönderdiği yanıt:: Bu komut dosyası neye benzediği

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

Sorunum "veri" ayrıştırmak zaman onun türü her zaman dizedir olduğunu. Bir nesne olması için ona ihtiyacım var, böylece onu sorgulayabilir ve senaryomla ayrıştırabilirim.

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

bu sayfada isteği ve benim isteği ile ana farklar kullandığı olmasıdır: sorunun altına almak için, ben jQuery'nin dokümanları sayfasındaki örneğe Senaryomu karşılaştıran denedim getJSON yöntemi. Bunu sunucumun url'si ile kullanmaya çalıştığımda hiç yanıt almadım, bu nedenle get yöntemi için tercih ettiğim ana neden ve dönüş türünü "json" olarak belirtmek.

Denediğim başka bir şey de: jQuery örneğinin, geri gönderdiği İçerik türü üstbilgisini aramak için kullandığı Flickr feed numarasını inceledim, belki de beslememin yanlış üstbilgiye sahip olduğunu düşündüm ve bu Flickr beslemesinde:

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

Bu, tam olarak kendi beslememde aynı üstbilgidir. Bu yüzden şaşkınım. Bunun neden olduğunu bilen var mı?

cevap

7

JSON etrafında parantez olması gerekir, bu yüzden olmalı: Bu bir nesne olarak veri almanın en kolay yolu olduğu gibi Ardından, getJSON kullanmak mümkün olmalıdır

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

. Ancak, dizeyi de değerlendirebilir() ve bir nesne döndürür.

+0

getJSON, JSONP vurmak istediği uç noktada desteklenmiyorsa çalışmayabilir. – singpolyma

+0

Bu doğru singpolyma, İç sunucumda JSONP'yi nasıl destekleyebilirim? – picardo

+0

Değerlendirmeyi eval() ve çevredeki döndürme nesnesini parens ile kullandığımda çözdüm. Şimdi getJSON ile çalışıyor. Teşekkürler beyler! – picardo

1

JavaScript dize() işlevini çağırarak bu dizenin bir nesnesini oluşturmayı denediniz mi? Geri arama fonksiyonunuzda eval (data) dediğinizde, size bir nesne vermelidir.