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 に答える