2013-04-02 15 views
54

olarak kaydediyorum. Web sitemden JSON istemek için getJSON kullanıyorum. O inşaat büyük, ama bu gibi başka bir değişkene içine çıktısını kaydetmek gerekir:jQuery getJSON sonucu

var myjson= $.getJSON("http://127.0.0.1:8080/horizon-update", function(json) { 

       }); 

ben myjson içine sonucu kaydetmek gerekir ancak bu sözdizimi doğru değil gibi görünüyor. Herhangi bir fikir?

+0

Basitçe 'var myjson = kaldırmak' – Cristy

+0

göz at [bir fonksiyonu bir AJAX çağrısını dönmek nasıl?] (Http://stackoverflow.com/questions/14220321/how-to- yanıt-a-ajax-a-a-from-a-işlevi) - en azından size sorunu nasıl çözeceğine dair doğru bir fikir vermelidir. Sözdizimi btw geçerli, sadece istediğini yapmıyor. –

cevap

57

Yalnızca yanıtlandıktan sonra getJSON numaralı telefonu arayarak değer elde edemezsiniz.

var myjson; 
$.getJSON("http://127.0.0.1:8080/horizon-update", function(json){ 
    myjson = json; 
}); 
+3

Buradaki problem, 'var myjson'un zamanlama sorunları nedeniyle bir sonraki satırda mevcut olmamasıdır. –

+2

@JanDvorak Evet, istek senkronize olmayan bir şekilde yürütülür, eğer devam etmek için 'json' verisine ihtiyacınız varsa, 'myjson' değişkenini ayarladıktan sonra başka bir kod çağırmalısınız. Çözelti olarak, Ravi yanıtından 'callbackFuncWithData' gibi olabilir VEYA başka bir işlev çağırın. – webdeveloper

+1

Bunu yaptıktan sonra, 'myjson' dışını ilan etmenin bir anlamı yok. Sadece bir argüman olarak geri aramaya iletin. –

20

$ .GetJSON bir geri arama fonksiyonları ya küresel variale atamak geri arama işlevine geçmek veya geri arama işlevi bekliyor.

var globalJsonVar; 

    $.getJSON("http://127.0.0.1:8080/horizon-update", function(json){ 
       //do some thing with json or assign global variable to incoming json. 
       globalJsonVar=json; 
      }); 

IMO en iyi geri arama işlevini çağırmaktır. Göze daha hoş, okunabilirlik yönleri.

$.getJSON("http://127.0.0.1:8080/horizon-update", callbackFuncWithData); 

function callbackFuncWithData(data) 
{ 
// do some thing with data 
} 
+3

İlk çözümün işe yaramayacağını düşünüyorum. .getJSON eşzamansızdır, dolayısıyla herhangi bir dış değişkene ulaşamazsınız. Yapmanız gereken şey async olarak ayarlanmıştır: düşük seviyeli ajax – lngs

+2

@ lngs'de yanlış: Hayır, işe yarayacaktır. Geriçağırım işlevi bir * kapanmadır * ve daha yüksek kapsamlarda tanımlanan tüm değişkenlere erişime sahiptir. Yine de dikkatli olmalısınız, * değişkene erişmek için *, yani '$ .getJSON' aramasını yaptıktan hemen sonra erişemezsiniz. Bu durumda, eşzamanlı bir istek yapmanız gerekirdi. –

+2

Peki ajax çağrısının ne zaman tamamlandığını ve yanıt verilerinin ne kadar büyük olduğunu nasıl bilebilirsiniz? Bunu yapmak için hala geri çağırma işlevini kullanmanız gerekir. – lngs