jQuery возвращает результат ajax во внешнюю переменную

У меня есть некоторые проблемы с использованием AJAX.

Как я могу назначить все результаты из ajax во внешнюю переменную?

Я погуглил и нашел этот код ..

var return_first = (function () {
    var tmp = null;
    $.ajax({
        'async': false,
        'type': "POST",
        'global': false,
        'dataType': 'html',
        'url': "ajax.php?first",
        'data': { 'request': "", 'target': arrange_url, 'method': method_target },
        'success': function (data) {
            tmp = data;
        }
    });
    return tmp;
});

но не работа для меня ..

Кто-нибудь может сказать, что не так с этим кодом? "

 Ohgodwhy29 мая 2013 г., 06:18
Вызов асинхронный,tmp никогда не будет заполнен, потому что он будет выполняться немедленно, вам нужно использоватьdeferred или жеpromise объекты здесь.
 Igor29 мая 2013 г., 06:20
@ Ohgodwhy - у него есть'async': false вajax опции.
 Igor29 мая 2013 г., 06:09
не работа для меня - Я неВозьми мой хрустальный шар, чтобы понять, что это значит. Как вы используетеreturn_first переменная?
 Mohd Shahril29 мая 2013 г., 06:11
это сделает запрос в "ajax.php? первый» с данными поста, если данные верны, то распечатаетХОРОШО"если нет тоНЕ ХОРОШО"и я хочу, чтобы эти результирующие строки были присвоены переменной return_first ..

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

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

Вы пропустили запятую после

'data': { 'request': "", 'target': 'arrange_url', 'method': 'method_target' }

Кроме того, если вы хотитеreturn_first чтобы сохранить результат вашей анонимной функции, вам нужно вызвать функцию:

var return_first = function () {
    var tmp = null;
    $.ajax({
        'async': false,
        'type': "POST",
        'global': false,
        'dataType': 'html',
        'url': "ajax.php?first",
        'data': { 'request': "", 'target': 'arrange_url', 'method': 'method_target' },
        'success': function (data) {
            tmp = data;
        }
    });
    return tmp;
}();

Заметка() в конце.

 Ohgodwhy29 мая 2013 г., 06:19
Проблема в том, что переменная никогда не будет установлена, потому что вызов асинхронный ...
 Mohd Shahril29 мая 2013 г., 06:16
спасибо за запятую (я забыл поставить), и пример ajax, который вы предоставляете, работает .. спасибо!
 kneidels27 июн. 2018 г., 13:35
@psysane - так как этот код будет лучше всего работать сейчас, когдаasync был амортизирован?
 Saikat14 апр. 2018 г., 16:18
НОТА: Использование "асинхронный» был амортизирован. Увидетьxhr.spec.whatwg.org.
 joshuahealy29 мая 2013 г., 08:41
@Ohgodwhy в асинхронном вызове ajax имеет значение false, так что на самом деле это будет работать.
 Saikat27 июн. 2018 г., 16:46
@kneidels с помощью обратных вызовов, см. ответ Захры Геда ниже

С помощью 'асинхронный»: ложный предотвращать асинхронный код - плохая практика,

Синхронный XMLHttpRequest в основном потоке устарел из-за его пагубных последствий для конечного пользователя.с опытом.https://xhr.spec.whatwg.org/

На поверхности установка async в false устраняет множество проблем, потому что, как показывают другие ответы, ваши данные помещаются в переменную. Однако, ожидая возвращения данных поста (что в некоторых случаях может занять несколько секунд из-за вызовов базы данных, медленных подключений и т. Д.), Остальные функции Javascript (такие как инициируемые события, обработанные кнопки Javascript, переходы JQuery (например, аккордеон, или автозаполнение (JQuery UI)) не сможет произойти, пока ответ находится в ожидании (что очень плохо, если ответ никогда не возвращается, так как ваш сайт теперь по сути заморожен).

Попробуйте это вместо этого,

var return_first;
function callback(response) {
  return_first = response;
  //use return_first variable here
}

$.ajax({
  'type': "POST",
  'global': false,
  'dataType': 'html',
  'url': "ajax.php?first",
  'data': { 'request': "", 'target': arrange_url, 'method': method_target },
  'success': function(data){
       callback(data);
  },
});
 Ahmed Baoun23 сент. 2018 г., 13:46
попробовал это нет работа

Это все, что вам нужно сделать:

var myVariable;

$.ajax({
    'async': false,
    'type': "POST",
    'global': false,
    'dataType': 'html',
    'url': "ajax.php?first",
    'data': { 'request': "", 'target': 'arrange_url', 'method': 'method_target' },
    'success': function (data) {
        myVariable = data;
    }
});

НОТА: Использование "асинхронный» был амортизирован. Увидетьhttps://xhr.spec.whatwg.org/.

 Ansjovis8615 янв. 2018 г., 13:30
@tim_stuff Ну, я думаю, что когда он асинхронный, код продолжит работу, не получив ответа от сервера. Это будет означать, что выПеременная вызывается без ее присутствия. При выполнении этого синхронно код будет продолжаться только после получения ответа от сервера.
 tim_stuff10 янв. 2018 г., 19:40
@ Ansjovis86, то же самое для меня. У вас есть идея, почему это так?
 Ansjovis8622 апр. 2017 г., 13:41
Async: false решил мою проблему. Без этого я могуне хранить его в переменной.
 Mohd Shahril29 мая 2013 г., 06:20
Ваш пример кода также работает для меня, спасибо! :)

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