jQuery将错误的输入值传递给PHP

时间:2017-03-14 07:26:02

标签: javascript php jquery

一切都很好,除了一件事。当我在输入框中写入内容时,首先它会传递并正确回显一会儿,然后最后几个字符/数字消失。 例如,如果我写作: 你好 然后,PHP回显你好,过了一会儿,这个词就变成了H或Hell 消失的字符数取决于输入单词的速度,就像我快速写字一样,字符消失。 当我写得非常慢,一个字母,这个词正确回应,没有任何变化。 以下是供参考的代码:

HTML:

<input name="paramA" id="paramA" type="text" class="form-control" maxlength="5" required/>

jQuery的:

$("#paramA").on("keyup", function () {
    var paramB = $('#paramB').val();
    var paramA = $('#paramA').val();
    var spaced = $.trim($(this).val());
    if ( !$(this).val() || $(this).val() !== spaced) {
        $("#result").html("");
    } else {
        $.post( 'http://localhost/folder/code.php',    
                {'paramB':paramB,'paramA':paramA}, 
                function(data) {
                    $("#result").html(data);
                }
        );
    }
}); 

PHP:

echo $_POST["paramA"];

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

问题是,ajax呼叫总是花费相同的时间 因此,如果您打字速度很快,那么呼叫&#34; Hell&#34;和#34;您好&#34;几乎在同一时间开始。

因此,如果由于某种原因&#34;地狱&#34;调用需要更长时间,PHP将返回&#34; Hello&#34;回声,然后你收到&#34;地狱&#34;。 (覆盖&#34;你好&#34;在你的输出中。)

对此的解决方案是cancel the pending ajax request before starting a new one

或者在timeout函数中使用keyup仅在500毫秒内没有输入任何内容时启动ajax调用。
(你仍然应该取消任何待定的ajax调用,只是为了确定)

像这样:

var timeout = null;
$("#paramA").on("keyup", function () {
    clearTimeout(timeout); // clear currently waiting timeout
    timeout = setTimeout(function(){ // wait 500 ms before ajax call
        var paramB = $('#paramB').val();
        var paramA = $('#paramA').val();
        var spaced = $.trim($(this).val());
        if ( !$(this).val() || $(this).val() !== spaced) {
            $("#result").html("");
        } else {
            $.post( 'http://localhost/folder/code.php',    
                    {'paramB':paramB,'paramA':paramA}, 
                    function(data) {
                        $("#result").html(data);
                    }
            );
        }
    }, 500);
}); 

答案 1 :(得分:0)

这应该为你做。

var to = null;
$("#paramA").on("keyup", function () {        
    var paramB = $('#paramB').val();
    var paramA = $.trim($(this).val());
    if ( paramA.length > 0) { // adjust 0 to a minimum number of characters before post to php
        if (to !== null) {
           clearTimeout(to);
        }
        to = setTimeout(function() {
            $.post( 'http://localhost/folder/code.php',    
                {'paramB':paramB,'paramA':paramA}, 
                function(data) {
                    $("#result").html(data);
                }
            );
        }, 500); // adjust the time in ms, how long you want to wait until the post will be send
    }
});