получить возвращенные значения из jquery get?

Я делаю вызовы jquery для get и getJSON, но не могу получить доступ к возвращенным значениям вне функции обратного вызова. Как я могу получить доступ к возвращенным данным?

        var firstid;
        var nextid;

    $.get(callUrl, function(data) {  // call to add node
         var n = data.indexOf("id-");
         var m = data.indexOf("id-");
         firstid = data.substr(n+3,m - (n+3));
         nextid = data.substr(m+3);

             alert("firstid:" + firstid);  // returns correct value
    });

        alert("firstid:" + firstid);  // returns undefined for firstid

Как я могу получить первый вне функции?

 iambriansreed22 июн. 2012 г., 21:53
любойanswers Помогите?

Ответы на вопрос(3)

что это делается асинхронно (один из основных принципов AJAX). Вы можете установитьасинхронной в false или использовать другую конструкцию обратного вызова, чтобы использовать ваше значение, возвращаемое из вызова get.

Решение Вопроса

ALL AJAX CALLS ARE ASYNCHRONOUS

Так что выneed использовать обратные вызовы. все, что за пределами, вернетсяundefined.

$.get(callUrl, function(data) {  // call to add node
     var n = data.indexOf("id-");
     var m = data.indexOf("id-");
     firstid = data.substr(n+3,m - (n+3));
     nextid = data.substr(m+3);

     doSomethingWithFirst(firstid);
});

function doSomethingWithFirst(f)   {
     //NOW do something
}
 22 июн. 2012 г., 18:36
@ user840930Do not do that это замедлит работу вашего веб-приложения и может даже привести к сбою старых браузеров.
 22 июн. 2012 г., 15:35
@iambriansreed 5 секундная задержка ??? Как вы знаете, сколько времени сервер ответит ???
 22 июн. 2012 г., 15:53
добавление произвольных переменных в глобальную область также не рекомендуется ... поэтому было бы целесообразно определить их и передать их (при условии, что они не используются где-то еще ... этот пример ограничен)
 22 июн. 2012 г., 15:20
-1 Технически не правда. Если он завернул второйalert("firstid:" + firstid); за время с задержкой в 5 секунд он будет отображать ожидаемый результат за пределами этой функции успеха.
 22 июн. 2012 г., 15:42
Я не знаю наверняка, сколько времени может понадобиться серверу, чтобы ответить, вы правы, но аргумент остается тем же: все, что находится за пределами обратного вызова, не обязательно не определено. ОП был правильным, чтобы определить переменные внеget область обратного вызова и поэтому она обновляется, и последующие вызовы этой переменной фактически дают ожидаемые результаты. Наконец нетall Вызовы AJAX являются асинхронными, фактически вы можете установить запрос синхронным, но этоnot recommended.

alert("firstid:" + firstid); возвращаетсяundefined потому что на момент исполнения это на самом делеundefined.

Первыйalert("firstid:" + firstid); возвращает ожидаемый результат при запуске после$.get закончил получать.

AJAX - обозначает асинхронный JavaScript и XML. Асинхронные события - это события, происходящие независимо от основного потока программы. Пока тыcan установить запрос на синхронный этоnot recommended.

Если вы завернули свой второйalert("firstid:" + firstid); в течение тайм-аута с 5-секундной задержкой будет отображаться ожидаемый результат.

setTimeout(function() { alert("firstid:" + firstid); }, 5000);

Или вы могли бы завернуть свой второйalert("firstid:" + firstid); в интервале с задержкой в 1 секунду в конечном итоге будет отображаться ожидаемый результат.

var callback_interval = setInterval(function() {
    if(typeof(firstid) == 'undefined') return;
    clearInterval(callback_interval);
    alert("firstid:" + firstid);
}, 1000);

Но лучше всего работать с переменными прямо в$.get успешный обратный вызов или вызовы функций в рамках этого успешного обратного вызова.

 22 июн. 2012 г., 18:37
Есть ли причина для отрицательного голосования? Мои факты не так?

Ваш ответ на вопрос