Оберните функцию jquery и верните значение - PullRequest
3 голосов
/ 20 января 2011

Можно обернуть этот код так, чтобы при вызове функции возвращалась переменная, составляющая объект json?

Пример:

   function GetNewSomething() {
        var newtb = 0;
        $.get("/something/new",
                function (data) {
                    newtb = data;
                }
                );
        return newtb; // as of now this always returns undefined...
    }

Пробовал таким образом, но возвращал только undefined ..

Заранее спасибо, ребята!

С уважением,

Ответы [ 4 ]

6 голосов
/ 20 января 2011

Вы не можете. Ajax-вызовы асинхронны. Вы должны передать обратный вызов вашей функции:

function GetNewSomething(cb) {
    $.get("/something/new", cb);
}

и позвоните по этому номеру:

GetNewSomething(function(data) {
    // do something with data
});

Я написал что-то об этом .

Да, и если ответ представляет собой строку JSON, вы можете использовать .getJSON, который также декодирует ответ в объект JavaScript.

3 голосов
/ 20 января 2011

.get() - это оболочка для $.ajax(). Все AJAX-запросы выполняются асинхронно , если не указано иное. Это, в свою очередь, означает, что ваш оператор return newtb; произойдет до того, как $.get() завершится.

Хороший способ обойти эту проблему - вызвать другой обратный вызов самостоятельно. Это может выглядеть так:

function GetNewSomething(callback) {
    $.get("/something/new",
            function (data) {
                if( typeof callback === 'function' )
                    callback.apply(this, [data]);
            }
            );
}

А потом назовите это как

GetNewSomething(function(data) {
     // do something with data
});
0 голосов
/ 20 января 2011

Вы можете изменить значение $.get a $.ajax и сделать его синхронным, поскольку $.get - это просто оболочка для $.ajax:

function GetNewSomething() {
        var newtb = 0;
        $.ajax({url:"/something/new",
                type:"GET",
                async:false,
                success: function (data) {
                    newtb = data;
                }
          });
        return newtb; 
    }
0 голосов
/ 20 января 2011

$.get является асинхронным, поэтому вы передаете ему функцию для вызова при возврате запроса get.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...