调用函数并等到响应返回后再继续?

时间:2014-03-03 18:25:15

标签: jquery ajax function return-value

尝试使用返回true或false的函数,并且还包含一些ajax。

我调用一个期望真或假回复的函数:

if(stepIsValid(stepName) == true) {
//Do Something
}
else doSomethingElse();

函数'stepIsValid()'执行多项检查,然后通过AJAX请求其他信息。然后返回true或false:

function stepIsValid(stepName) {
    var isValid = true;

    if(condition) {
        isValid = false;
    }
    if(condition) {
        isValid = false;
    }
    if(condition) {
        isValid = false;
    }
    if (pub && isbn) {
        $.post( "/index.php/mypath", { isbn: isbn, name: pub })
            .done(function( data ) {
                $("#resultElement").val(data);
                isValid = true;
                return isValid;
            })
           .error(function( data ) {
                isValid = false;
                return isValid;
           });
    }
    else {
        isValid = false;
        return isValid;
    }

我的问题是,当调用stepIsValid时,jQuery不会等待响应,假定为false并在返回true之前调用doSomethingElse()。

解决这个问题的最佳方法是什么?

Code实际上确实返回true但不够快。

这两个函数都在单独的文件中。

(假设条件,酒吧,isbn都被检测并可用)

2 个答案:

答案 0 :(得分:3)

尝试:

function stepIsValid(stepName, callback) {
var isValid = true;

if(condition) {
    isValid = false;
}
if(condition) {
    isValid = false;
}
if(condition) {
    isValid = false;
}
if (pub && isbn) {
    $.post( "/index.php/mypath", { isbn: isbn, name: pub })
        .done(function( data ) {
            $("#resultElement").val(data);
            isValid = true;
            callback(isValid);
        })
       .error(function( data ) {
            isValid = false;
            callback(isValid);
       });
}
else {
    isValid = false;
    callback(isValid);
}

并将其用于:

stepIsValid(stepName, function(valid) {
    if(valid) {
        //Do Something
    }
    else doSomethingElse();
});

答案 1 :(得分:0)

降低你的功能

试试这个:

function stepIsValid(stepName) {
var isValid = false;
if (pub && isbn) {
    $.post( "/index.php/mypath", { isbn: isbn, name: pub })
        .done(function( data ) {
            $("#resultElement").val(data);
            isValid = true;
            return isValid;
        })
       .error(function( data ) {
            return isValid;
       });
}
}
相关问题