Как создать функцию обратного вызова с помощью Ajax? - PullRequest
0 голосов
/ 02 октября 2019

Я работаю над jquery для вызова функции, чтобы получить возвращаемое значение, которое я хочу сохранить для переменной email_number при обновлении на странице.

Когда я пытаюсь это сделать:

function get_emailno(emailid, mailfolder) {

    $.ajax({
        url: 'getemailnumber.php',
        type: 'POST',

        data : {
            emailid: emailid,
            mailfolder: mailfolder
        },

        success: function(data)
        {
            email_number = data;
        }
    });
    return email_number;
}

Я получу возвращаемое значение как 6, как только при использовании alert(email_number) после email_number = data;, но я не могу получить значение вне функции.

Вот полный код:

var email_number = '';

// check if page refreshed or reloaded
if (performance.navigation.type == 1) {
    var hash    = window.location.hash;
    var mailfolder = hash.split('/')[0].replace('#', '');
    var emailid = 'SUJmaWg4RTFRQkViS1RlUzV3K1NPdz09';
    get_emailno(emailid, mailfolder);
}

function get_emailno(emailid, mailfolder) {

    $.ajax({
        url: 'getemailnumber.php',
        type: 'POST',

        data : {
            emailid: emailid,
            mailfolder: mailfolder
        },

        success: function(data)
        {
            email_number = data;
        }
    });
    return email_number;
}

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

Я пробовал это, и я все еще не получаю возвращаемое значение вне функции get_emailno.

    $.ajax({
        url: 'getemailnumber.php',
        type: 'POST',
        async: true,

        data : {
            emailid: emailid,
            mailfolder: mailfolder
        },

        success: function(data)
        {
            email_number = data;
        }
    });

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

Не могли бы вы показать мне пример использования функции обратного вызова? Функция на ajax, чтобы получить возвращаемое значение, где я могу сохранить значение в переменной email_number?

Спасибо.

1 Ответ

0 голосов
/ 02 октября 2019

Из документации jquery метод $.ajax() возвращает объект jqXHR (полностью читается как объект jquery XMLHttpRequest).

Когда вы возвращаете данные с сервера в другомфункция, подобная этой

function get_emailno(emailid, mailfolder) {

    $.ajax({ 
        // ajax settings
    });
    return email_number;
}

Обратите внимание, что $.ajax ({...}) вызов асинхронный. Следовательно, код внутри него не обязательно выполняется перед последним оператором возврата. Другими словами, вызов $.ajax () является отложенным для выполнения в будущем, в то время как оператор return выполняется немедленно.

Следовательно, jquery указывает, что вы обрабатываете (или реагируете) выполнение ajax-запросов с помощью обратных вызовов и , а не операторов возврата.

Существует два способа определения обратных вызовов.

1. Определите их в настройках jjery ajax-запроса следующим образом:

$.ajax({ 
    // other ajax settings 
    success: function(data) {},
    error: function() {},
    complete: function() {},
});

2. Или объединить обратные вызовы возвращенного объекта jqXHR следующим образом:

$.ajax({ 
    // other ajax settings 
}).done(function(data) {}).fail(function() {}).always(function() {});

Два метода эквивалентны. success: эквивалентно done(), error: эквивалентно fail() и complete: эквивалентно always().

Включено, когда уместно использовать, какую функцию: используйте success:обрабатывать случай, когда возвращаемые данные - это то, что вы ожидаете;используйте error:, если что-то пошло не так во время запроса, и, наконец, используйте complete:, когда запрос завершен (независимо от того, был ли он успешным или нет).

С этим знанием вы можете лучше написать свой код для catch данные, возвращенные с сервера в в нужное время .

var email_number = '';

// check if page refreshed or reloaded
if (performance.navigation.type == 1) {
    var hash    = window.location.hash;
    var mailfolder = hash.split('/')[0].replace('#', '');
    var emailid = 'SUJmaWg4RTFRQkViS1RlUzV3K1NPdz09';
    get_emailno(emailid, mailfolder);
}

function get_emailno(emailid, mailfolder) {

    $.ajax({
        url: 'getemailnumber.php',
        type: 'POST',

        data : {
            emailid: emailid,
            mailfolder: mailfolder
        },

        success: function(data)
        {
            // sufficient to get returned data
            email_number = data;

            // use email_number here
            alert(email_number); // alert it
            console.log(email_number); // or log it
            $('body').html(email_number); // or append to DOM
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...