AJAXリクエストを遅延させて、入力セルのLASTキーアップから2〜3秒後に送出しようとしています。
これまでのところ私はリクエストを遅らせていましたが、2-3秒後にはフィールド内のすべてのキーアップに対して1つのリクエストが送られてきました...
jQueryは最初のものをキャンセルして最後のキーアップを送信できますか?
はここで、これまでのコードです:上記jQuery AJAXリクエストに遅延を追加しようとしています
$('#lastname').focus(function(){
$('.terms :input').val(""); //clears other search fields
}).keyup(function(){
caps(this); //another function that capitalizes the field
$type = $(this).attr("id"); // just passing the type of desired search to the php file
setTimeout(function(){ // setting the delay for each keypress
ajaxSearchRequest($type); //runs the ajax request
}, 1000);
});
このコードは、その後、1秒を待つキー押下に応じて、4-5 AJAX要求を送信します。 私はちょうど最後の後に送信されます。keyup
私はJavascriptを使用するStackOverflowでいくつかの同様のソリューションを見つけましたが、私はプログラミングの小さな知識のために私のプロジェクトにそれらを実装することができませんでした。あなたができるようになるので、
function ajaxSearchRequest($type){
var ajaxRequest2; // The variable that makes Ajax possible!
try{
// Opera 8.0+, Firefox, Safari
ajaxRequest2 = new XMLHttpRequest();
}catch (e){
// Internet Explorer Browsers
try{
ajaxRequest2 = new ActiveXObject("Msxml2.XMLHTTP");
}catch (e) {
try{
ajaxRequest2 = new ActiveXObject("Microsoft.XMLHTTP");
}catch (e){
// Something went wrong
alert("Browser error!");
return false;
}
}
}
ajaxRequest2.onreadystatechange = function(){
if(ajaxRequest2.readyState == 4){
$result = ajaxRequest2.responseText;
$('#resultcontainer').html($result);
}}
var searchterm = document.getElementById($type).value;
var queryString ="?searchterm=" + searchterm +"&type=" +$type;
if(searchterm !== ""){
ajaxRequest2.open("GET", "searchrequest.php" +
queryString, true);
ajaxRequest2.send(null);
}
}
「ajaxSearchRequest」のコードを投稿 – Imdad
@Imdadなぜそれが必要ですか?以前のものを取り消すことなく、それぞれのキーアップが新しいタイムアウトになっているのをすでに見ることができます。 – Esailija
他の回避策があります。私は、機能が何であるかを知っているかどうかだけを伝えることができます。 – Imdad