2011-11-11 2 views
0

(1. Вы находите это полезно иметь глобальный Jquery Аякс «помощник», который вы можете позвонить Аяксу (URL, данные, асинхронный)?)уведомление-кий возвращаемого значения АЯКСА вызова

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); 

если я оповещение (get_ajax()) я получаю предупреждение о «неопределенном» .. даже если есть возвращаемое значение

я вижу свою проблему цикла событий, но я ASync ложь в вызове ajax. мысли? Спасибо.

ответ

3

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

success: function(response) { 
    return response; 
} 

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

var val = ''; 

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

return val; 

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

+0

вы da bawsssss – Mike

0

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

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

success: function(response) { 
    alert(response); 
}, 
+0

Но мне нужно, чтобы вернуть ответ. Я получаю значение, если i alert() внутри успеха, но не когда i alert() ajax fnction. – Mike

+0

Ну, если он асинхронный, вы не можете получить ответ напрямую, так как вызов ajax не блокируется: он будет доступен только после вызова функции «success» callback. Независимо от того, что вы хотите сделать с этими данными, вам придется реорганизовать свой код, чтобы он мог быть обновлен из обратного вызова «success». Не можете ли вы переместить весь свой код, на который влияет этот вызов, который будет использоваться _after_ завершен вызов ajax? – jro

+0

была моей ошибкой, я забыл, что я установил ее на синхронный – Mike

1

Для синхронного вызова, я полагаю, вы могли бы сделать

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

upvote, но у другого парня был тот же самый ответ. спасибо тебе! – Mike

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