如果ajax结果为true,我需要函数返回true

时间:2012-08-23 22:58:37

标签: javascript jquery ajax

这是我的代码:

    function validateField(field, input) {

    if (field && input) { 

        $.ajax({
            type: 'POST',
            url: '<?php echo site_url("ajax/verify"); ?>',
            dataType: 'json',
            data: { 'field' : field, 'input' : input},
            success: function(result) {
                var available = result.available;
                if (available == 1) {

                   // return true (for the entire function);
                }

            }
        });
    } 

    return false;


}

2 个答案:

答案 0 :(得分:6)

现在最正确的做法是使用$.Deferred

function validateField(field, input) {
    if (field && input) { 
        return $.ajax({
            type: 'POST',
            url: '<?php echo site_url("ajax/verify"); ?>',
            dataType: 'json',
            data: { 'field' : field, 'input' : input}
        }).pipe(function(result) {
            var available = result.available;
            return available == 1;
        });
    }

    return $.Deferred().resolve(false);
}

validateField('somefield', 'someinput')
    .done(function(result) {
        if (result) {
            alert('it is true');
        } else {
            alert('it is false');
        }
    });

基于回调的解决方案(我不喜欢它; - ):

function validateField(field, input, callback) {
    var cb = $.isFunction(callback) ? callback : $.noop;

    if (field && input) { 
        $.ajax({
            type: 'POST',
            url: '<?php echo site_url("ajax/verify"); ?>',
            dataType: 'json',
            data: { 'field' : field, 'input' : input},
            success: function(result) {
                var available = result.available;
                cb(available == 1);
            }
        });
        return;
    }

    cb(false);
}

validateField('somefield', 'someinput', function(result) {
    if (result) {
        alert('it is true');
    } else {
        alert('it is false');
    }
});

答案 1 :(得分:1)

执行此操作的唯一方法是使请求同步(async: false)并在成功函数内切换外部作用域中的布尔变量的值。 这不推荐,甚至不支持jQuery 1.8。 Ajax基于回调模式,如果满足某些条件则触发某些功能。如果有效的话,在ajax回调的成功函数中做任何事情会更好。

function validateField(field, input, success) {
    var valid = false;

    if (field && input) { 
        $.ajax({
            type: 'POST',
            async: false,
            url: '<?php echo site_url("ajax/verify"); ?>',
            dataType: 'json',
            data: { 'field' : field, 'input' : input},
            success: function(result) {
                var available = result.available;
                if (available == 1) {

                   // return true (for the entire function);
                    valid = true;

                    // BETTER TO CALL doSomethingIfValid(); here
                }

            }
        });
    }

    return valid;
}​