0

这是我的代码:

    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;


}
4

2 回答 2

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');
    }
});
于 2012-08-23T23:02:51.430 回答
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;
}​
于 2012-08-23T23:03:46.503 回答