Оповещение о возвращаемом значении вызова ajax

(1. Считаете ли вы полезным иметь глобальный jquery ajax 'helper', который вы можете назвать ajax (url, data, async)?)

function ajax(ajax_url, ajax_data, ajax_async){
  ajax_async = typeof(ajax_async) != 'undefined' ? ajax_async : true;

  $.ajax({
    type: 'GET',
    url: ajax_url,
    data: ajax_data,
    async: ajax_async,
    dataType: 'text',
    success: function(response) {
        return response;
    },
    error: function(){

    }
  });
}

если я вызываю функцию, которая помещает GET и возвращает ответ об успехе.

alert(ajax('localhost/hello','',false);

если я делаю alert(get_ajax()), я получаю уведомление о 'undefined'.. даже если было возвращаемое значение

я вижу проблему с циклом обработки событий, но в вызове ajax я async:false. мысли? благодарю вас.

3 ответа

Решение

Это один из тех вопросов, которые задавались миллион раз, но поиск практически невозможен. Во всяком случае, проблема в том, что, когда вы вернетесь отсюда...

success: function(response) {
    return response;
}

... ты не вернешься из ajax() функция, но анонимный success функция. Чтобы вернуть значение из основной функции, вы должны сохранить строку в переменной, чтобы вы могли вернуться из правильной функции.

var val = '';

$.ajax({
    //       ....
    success: function(response) {
       val = response;
    },
    //       ....
});

return val;

Обратите внимание, что это работает только тогда, когда вы делаете синхронный вызов. Для асинхронных вызовов лучше дать функцию обратного вызова в качестве аргумента и использовать ее в качестве функции успеха.

Я полагаю, что для синхронного звонка

var data;
$.ajax({
    ...
    async: false,
    success: function(response) {
        data = response;
    }
});
return data;

Ваш ajax функция оборачивает $.ajax звонить, ничего не возвращает: вот где undefined происходит от. Чтобы получить некоторую ценность в вашем alert Например, вы должны добавить оператор возврата в нижней части вашей функции.

Чтобы получить оповещение с ответом, нужно сделать следующее:

success: function(response) {
    alert(response);
},
Другие вопросы по тегам