Порядок выполнения кода при использовании jsonp с jQuery - PullRequest
0 голосов
/ 28 декабря 2011

Я использую jsonp с jQuery, и он работает хорошо.Но порядок выполнения кода не тот, который я ожидаю.Я имею в виду, у меня есть функция:

function is_server_alive() {
    var result;
    console.log("beginning of function result" + result);
    $.ajax({
        url: server + "/is_alive",
        async: false, 
        dataType: "jsonp",
        jsonp: "callback",
        success: function(JSON){
            result = JSON.return;
            console.log("is_server_alive result: " + result);
        },
        error: function(XMLHttpRequest, textStatus, errorThrown){
            console.log("server is dead " + textStatus);
        },
    });
    console.log("end of function result: " + result);
    return result;
}

Я пытаюсь вернуть переменную результата.Но из-за запроса ajax после всего, что случилось, я не могу этого сделать.Возвращаемое значение кажется неопределенным.Вывод на консоль, например:

beginning of function result: undefined
end of function result: undefined
is_server_alive result: 0

Я пытаюсь выполнить асинхронный вызов как true / false, и ничего не изменилосьКак я могу вернуть переменную результата или изменить порядок выполнения, чтобы вывод стал:

beginning of function result: undefined
is_server_alive result: 0
end of function result: 0

1 Ответ

0 голосов
/ 28 декабря 2011

Вы можете добавить другую настройку, complete, к функции $.ajax:

function is_server_alive() {
    var result;
    console.log("beginning of function result" + result);
    $.ajax({
        url         : server + "/is_alive",
        async       : false, 
        dataType    : "jsonp",
        jsonp       : "callback",
        success     : function(JSON){
            result  = JSON.return;
            console.log("is_server_alive result: " + result);
        },
        error       : function(XMLHttpRequest, textStatus, errorThrown){
            console.log("server is dead " + textStatus);
        },
        complete    : funciton () {
            console.log("end of function result: " + result);
            return result;
        }
    });

}
...