0

jQueryajaxとphpを使用してフィールドを検証したいと思います。

3文字を超えてテーピングを開始すると、リクエストがphpファイルに送信されますが、問題は、有効な3文字をタップし、4番目が無効な場合、リクエストの実行を4回待つ必要があることです。

最後のリクエストのみを実行し、他の保留中のリクエストを強制終了したい

私は試した:

xhr = $.ajax(//...);
xhr.abort();

if(typeof xhr !== 'undefined')
 xhr.abort();
xhr = $.ajax(//...);

しかし、それは機能しません

これは私のコードです:

// Check validation errors
var minLength = 3;
$('input[name^="data"][type=text]').on('keyup', function(){
    var input = $(this);
    var value = $.trim(input.val());
    var url = input.data('url');
    var div = input.parent();
    var serialized = input.serialize();
    if(value.length >= minLength){
        $.ajax({
            type: 'POST',
            url: url+'.json',
            data: serialized,
            dataType: 'json',
            success: function(data){
                var error = data.error;

                if(error){
                    div.removeClass('valid').addClass('invalid');
                }else{
                    div.removeClass('invalid').addClass('valid');
                }
            }
        });
    }
});
4

2 に答える 2

0

あなたが試すことができる何か、時間内に別のキーが押された場合、リクエストを送信しないでください:

var minLength = 3;
var time_out_id=0;
$('input[name^="data"][type=text]').on('keyup', function(){
    var input = $(this);
    var value = $.trim(input.val());
    var url = input.data('url');
    var div = input.parent();
    var serialized = input.serialize();
    if(value.length >= minLength){

        if(time_out_id != 0) clearTimeout(time_out_id);

        time_out_id = setTimeout(function(){

            time_out_id=0;
            $.ajax({
                type: 'POST',
                url: url+'.json',
                data: serialized,
                dataType: 'json',
                success: function(data){
                    var error = data.error;

                    if(error){
                        div.removeClass('valid').addClass('invalid');
                    }else{
                        div.removeClass('invalid').addClass('valid');
                    }
                }

            });

        }, 250);

    }
});

これは、最後のキー押下から 250ms が経過するまでリクエストを送信しません。

于 2013-02-12T20:58:20.950 に答える
0

これはうまくいかないと言っていますか?

var xhr = null;
// Check validation errors
var minLength = 3;
$('input[name^="data"][type=text]').on('keyup', function(){
    var input = $(this);
    var value = $.trim(input.val());
    var url = input.data('url');
    var div = input.parent();
    var serialized = input.serialize();
    if(value.length >= minLength){
        if (xhr) xhr.abort();           
        xhr = $.ajax({
            type: 'POST',
            url: url+'.json',
            data: serialized,
            dataType: 'json',
            success: function(data){
                // your code ...
                xhr = null;
            }
        });
    }
});
于 2013-02-12T21:03:13.530 に答える