Я хочу использовать jQuery ajax для получения данных с сервера.
Я хочу поместить определение функции обратного вызова успеха за пределами .ajax()
блока, как показано ниже. Итак, мне нужно объявить переменную, dataFromServer
как показано ниже, чтобы я мог использовать данные, возвращенные из обратного вызова успеха?
Я видел, как большинство людей определяют обратный вызов успеха внутри .ajax()
блока. Итак, правильный ли следующий код, если я хочу определить обратный вызов успеха снаружи?
var dataFromServer; //declare the variable first
function getData() {
$.ajax({
url : 'example.com',
type: 'GET',
success : handleData(dataFromServer)
})
}
function handleData(data) {
alert(data);
//do some stuff
}
источник
deferred objects
это было представлено? Я этого раньше не видел. Кроме того, это кажется немного запутанным, поскольку код, определяющий, какой обратный вызов использовать, находится в другом месте, чем фактический вызов AJAX.success:
. Отделение обратного вызова от AJAX - это хорошо ! См. Примечания, которые я только что добавил в конец своего ответа.$.get()
например, использовал , было бы невозможно добавитьerror:
обработчик, потому что$.get
он не поддерживает его. Однако вы можете добавить.fail
к отсроченному результату из$.get
.«Новый» способ сделать это, начиная с jQuery 1.5 (январь 2011 г.), заключается в использовании отложенных объектов вместо передачи
success
обратного вызова. Вы должны вернуть результат ,$.ajax
а затем использовать.done
, и.fail
т.д. методы для добавления обратных вызовов вне$.ajax
вызова .function getData() { return $.ajax({ url : 'example.com', type: 'GET' }); } function handleData(data /* , textStatus, jqXHR */ ) { alert(data); //do some stuff } getData().done(handleData);
Это отделяет обработку обратного вызова от обработки AJAX, позволяет добавлять несколько обратных вызовов, обратных вызовов при сбоях и т. Д., И все это без необходимости изменять исходную
getData()
функцию. Отделение функциональности AJAX от набора действий, которые необходимо выполнить впоследствии, - это хорошо!.Отложенные также позволяют намного проще синхронизировать несколько асинхронных событий, что вы не можете легко сделать с помощью
success:
Например, я мог бы добавить несколько обратных вызовов, обработчик ошибок и дождаться истечения таймера, прежде чем продолжить:
// a trivial timer, just for demo purposes - // it resolves itself after 5 seconds var timer = $.Deferred(); setTimeout(timer.resolve, 5000); // add a done handler _and_ an `error:` handler, even though `getData` // didn't directly expose that functionality var ajax = getData().done(handleData).fail(error); $.when(timer, ajax).done(function() { // this won't be called until *both* the AJAX and the 5s timer have finished }); ajax.done(function(data) { // you can add additional callbacks too, even if the AJAX call // already finished });
Другие части jQuery также используют отложенные объекты - с ними вы можете очень легко синхронизировать анимацию jQuery с другими асинхронными операциями.
источник
success:
потому что отложенные операции работают намного лучше.user:6782 deferred
для много больше примеров.alert
хотя ... я лично использую ,console.log(data)
или если это массив:console.table(data)
:)Я не знаю, почему вы определяете параметр вне сценария. В этом нет необходимости. Ваша функция обратного вызова будет вызываться автоматически с возвращаемыми данными в качестве параметра. Очень возможно определить обратный вызов за пределами
sucess:
IEfunction getData() { $.ajax({ url : 'example.com', type: 'GET', success : handleData }) } function handleData(data) { alert(data); //do some stuff }
будет вызвана функция handleData и передан ей параметр функцией ajax.
источник
Попробуйте переписать свой обработчик успеха на:
Свойство успеха метода ajax требует только ссылки на функцию.
В вашей функции handleData вы можете принимать до 3 параметров:
источник
Я бы написал:
var handleData = function (data) { alert(data); //do some stuff } function getData() { $.ajax({ url : 'example.com', type: 'GET', success : handleData }) }
источник
dataFromServer
поэтому первую строку можно удалить.Объявлять переменную не нужно. Функция успеха Ajax автоматически принимает до 3-х параметров:
Function( Object data, String textStatus, jqXHR jqXHR )
источник
через несколько часов поиграйте с ним, и оно почти станет тусклым. ко мне пришло чудо, все заработало.
<pre> var listname = []; $.ajax({ url : wedding, // change to your local url, this not work with absolute url success: function (data) { callback(data); } }); function callback(data) { $(data).find("a").attr("href", function (i, val) { if( val.match(/\.(jpe?g|png|gif)$/) ) { // $('#displayImage1').append( "<img src='" + wedding + val +"'>" ); listname.push(val); } }); } function myfunction() { alert (listname); } </pre>
источник
success : callback
jquery вызовет вашу функцию, вызываемуюcallback
сdata
параметром в ней.В вашем компоненте, то есть угловом JS-коде:
function getData(){ window.location.href = 'http://localhost:1036/api/Employee/GetExcelData'; }
источник