2013-04-02 3 views
54

Я использую getJSON для запроса JSON с моего сайта. Он отлично работает, но мне нужно, чтобы сохранить результат в другой переменной, например:jQuery getJSON сохранить результат в переменной

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

       }); 

Мне нужно, чтобы сохранить результат в myjson, но, кажется, что этот синтаксис не является правильным. Есть идеи?

+0

Просто удалите 'уаг myjson =' – Cristy

+0

Посмотрите [Как вернуть ответ от вызова AJAX из функции?] (Http://stackoverflow.com/questions/14220321/how-to- return-the-response-from-a-ajax-call-from-a-function) - по крайней мере, он должен дать вам правильную идею о том, как решить проблему. Синтаксис btw действителен, он просто не делает то, что вы хотите. –

ответ

57

Вы не можете получить значение при вызове getJSON, только после ответа.

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

Проблема заключается в том, что 'var myjson' недоступен на следующей строке из-за проблем с синхронизацией. –

+2

@JanDvorak Да, запрос выполняется асинхронно, если вам нужны данные 'json' для продолжения, вы должны вызвать другой код после установки переменной' myjson'. В качестве решения это может быть как «callbackFuncWithData» из ответа Ravi или просто вызвать другую функцию. – webdeveloper

+1

Как только вы это сделаете, нет причин, по которым «myjson» объявляется снаружи. Просто передайте его обратному вызову в качестве аргумента. –

20

$ .getJSON ожидает функция обратного вызова либо вы передать его в функцию обратного вызова или в функции обратного вызова назначить его глобальную 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 лучше всего вызвать функцию обратного вызова. что лучше для глаз, аспектов читаемости.

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

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

Я не думаю, что первое решение будет работать. .getJSON является асинхронным, поэтому вы не сможете достичь какой-либо внешней переменной. Что вам нужно сделать, это установить async: false на низком уровне ajax – lngs

+2

@lngs: Нет, это сработает. Функция обратного вызова является * закрытием * и имеет доступ ко всем переменным, определенным в более высоких областях. Вы все равно должны быть осторожны, но * когда * для доступа к переменной, т. Е. Вы не можете получить к ней доступ сразу после того, как вы сделали вызов '$ .getJSON'. В этом случае вам действительно нужно будет сделать синхронный запрос. –

+2

Итак, как вы могли узнать, когда закончен вызов ajax и насколько велики данные ответа? Для этого вам все равно нужно использовать функцию обратного вызова. – lngs

Смежные вопросы