一切都很好,除了一件事。当我在输入框中写入内容时,首先它会传递并正确回显一会儿,然后最后几个字符/数字消失。 例如,如果我写作: 你好 然后,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"];
任何帮助将不胜感激。
答案 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
}
});