определение функции обратного вызова jQuery ajax success


Я хочу использовать 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
}
8 76

8 ответов:

просто использовать:

function getData() {
    $.ajax({
        url : 'example.com',
        type: 'GET',
        success : handleData
    })
}

The success свойства требуется только ссылка на функцию, и передает данные в качестве параметра этой функции.

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

этот не считается для функций, объявленных так, хотя:

var myfunction = function(){}

они доступны только тогда, когда переводчик передал их.

см. этот вопрос для получения дополнительной информации о 2 способах объявления функций

"новый" способ сделать это с jQuery 1.5 (Jan 2011) заключается в использовании отложенных объектов вместо передачи success обратный. Вы должны возвращение результат $.ajax и затем использовать .done,.fail методы etc для добавления обратных вызовов за пределами $.ajax вызов.

function getData() {
    return $.ajax({
        url : 'example.com',
        type: 'GET'
    });
}

function handleData(data /* , textStatus, jqXHR */ ) {
    alert(data);
    //do some stuff
}

getData().done(handleData);

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

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

function getData() {
    $.ajax({
        url : 'example.com',
        type: 'GET',
        success : handleData
    })
}

function handleData(data) {
    alert(data);
    //do some stuff
}

будет вызвана функция handleData и передан ей параметр с помощью функции ajax.

попробуйте переписать обработчик успеха в:

success : handleData

свойство success метода ajax требует только ссылки на функцию.

в вашей функции handleData вы можете взять до 3 параметров:

object data
string textStatus
jqXHR jqXHR

Я бы написал :

var dataFromServer;  //declare the variable first

var handleData = function (data) {
    alert(data);
    //do some stuff
}


function getData() {
    $.ajax({
        url : 'example.com',
        type: 'GET',
        success : handleData
    })
}

вам не нужно объявлять переменную. Функция успеха 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>

в вашем компоненте т. е. угловой код JS:

function getData(){
    window.location.href = 'http://localhost:1036/api/Employee/GetExcelData';
}