2013-04-02 11 views
54

Używam getJSON do żądania JSON z mojej strony. Działa świetnie, ale muszę zapisać wyjście do innej zmiennej, tak:jQuery getJSON zapisz wynik do zmiennej

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

       }); 

muszę zapisać wynik w myjson ale wydaje się to składnia nie jest poprawna. Jakieś pomysły?

+0

Wystarczy usunąć 'var myjson =' – Cristy

+0

Zapraszamy do obejrzenia [Jak zwrócić odpowiedź z wywołania AJAX z funkcji?] (Http://stackoverflow.com/questions/14220321/how-to- return-the-response-from-a-ajax-call-from-a-function) - przynajmniej powinien dać ci właściwy pomysł, jak rozwiązać problem. Składnia btw jest poprawna, po prostu nie robi tego, co chcesz. –

Odpowiedz

57

Nie można uzyskać wartości, dzwoniąc pod numer getJSON, tylko po otrzymaniu odpowiedzi.

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

Problem polega na tym, że 'var myjson' nie jest dostępny w następnej linii z powodu problemów z synchronizacją. –

+2

@JanDvorak Tak, żądanie wykonuje się asynchronicznie, jeśli potrzebujesz danych 'json' do kontynuowania, powinieneś wywołać inny kod po ustawieniu zmiennej' myjson'. Jako rozwiązanie może to być "callbackFuncWithData" z odpowiedzi Ravi LUB po prostu wywołać inną funkcję. – webdeveloper

+1

Kiedy to zrobisz, naprawdę nie ma powodu, aby utrzymywać "myjson" na zewnątrz. Wystarczy przekazać go do wywołania zwrotnego jako argument. –

20

$ .getJSON oczekuje funkcje zwrotne albo przekazać je do funkcji zwrotnej lub w funkcji zwrotnej przypisać go do globalnego variale.

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 najlepiej jest wywołać funkcję zwrotną. co jest przyjemniejsze dla oczu, aspekty czytelności.

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

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

Nie sądzę, że pierwsze rozwiązanie będzie działać. .getJSON jest asynchroniczny, więc nie będziesz w stanie osiągnąć żadnej zmiennej zewnętrznej. Co musisz zrobić, to ustawić async: false w niskim poziomie ajax – lngs

+2

@lngs: Nie, to zadziała. Funkcja zwrotna jest * zamknięciem * i ma dostęp do wszystkich zmiennych zdefiniowanych w wyższych zakresach. Musisz jednak zachować ostrożność, * gdy * ma dostęp do zmiennej, tzn. Nie możesz uzyskać do niej dostępu natychmiast po wywołaniu '$ .getJSON'. W takim przypadku naprawdę musiałbyś złożyć synchroniczną prośbę. –

+2

Więc jak możesz wiedzieć, kiedy jest zakończone połączenie ajax i jak duże są dane odpowiedzi? Nadal musisz użyć funkcji wywołania zwrotnego, aby to zrobić. – lngs

Powiązane problemy