Как я могу вернуть значение из функции обратного вызова вызывающей стороне? - PullRequest
2 голосов
/ 31 марта 2011

Как сделать так, чтобы эта маленькая функция "imageExists" возвращала, был ли запрос ajax успешным или нет?

function imageExists(path){
    $.ajax({
        url: path,
        type: 'HEAD',
        error:
            function(){
                return false;
            },
        success:
            function(){
                return true;
            }
    }); 
}

Ответы [ 3 ]

4 голосов
/ 31 марта 2011

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

Поскольку запрос AJAX является асинхронным (я бы посоветовал не делать его блокирующим синхронным вызовом), вы делаете запрос, но не знаете, когда он вернется;он позвонит вам, когда вернется, поэтому вам просто нужно предоставить ему что-нибудь, чтобы позвонить.

function imageExists(path){
    $.ajax({
        url: path,
        type: 'HEAD',
        error:
            function(){
                iveReturned(false);
            },
        success:
            function(){
                iveReturned(true);
            }
    });   
}

function iveReturned(result) {
    // code here to do something following AJAX response.
}
3 голосов
/ 31 марта 2011

Полагаю, вам придется использовать синхронный режим и использовать отдельную переменную для хранения возвращаемого значения.

function imageExists(path){
    var isSuccess;
    $.ajax({
        url: path,
        type: 'HEAD',
        async: false,
        error:
            function(){
                isSuccess = false;
                return false;
            },
        success:
            function(){
                isSuccess = true;
                return true;
            }
    });
    return isSuccess;
}
1 голос
/ 31 марта 2011

Создайте переменную для хранения ответа на глобальном уровне, затем установите для async значение false.Затем вам нужно установить эту переменную в функции успеха или ошибки.

http://api.jquery.com/jQuery.ajax/

function imageExists(path){
myVar = null;
$.ajax({
    url: path,
    type: 'HEAD',
    error:
        function(){
            myVar = false;
        },
    success:
        function(){
            myVar = true;
        },
    async: false
}); 
}
...