私のプロジェクトのために簡単なAjax Live Searchを作成しようとしています.Javascriptは私の強みではありません。検索フレーズが0より大きい場合、AJAXリクエストを作成し、htmlを設定し、result-divを(SlideDownで)表示する必要があります。フレーズの長さが0に戻った場合、result-divは上にスライドします。検索フィールドが空の場合、結果divを非表示にする - Ajax Live Search
私の問題は、長さが0に戻ったときに、長さ1のフレーズによって行われたAJAX呼び出しがまだ(非同期要求のため)実行されておらず、結果div入力フィールドが空であっても、その最後のリクエストからのものです。
Ex。私は "馬"を検索し、すべて正常に動作します。次に、入力が空になるように文字を削除すると、divがスライドしてから、検索結果「H」で再びスライドします。
どうすれば解決できますか?
コード
let delayTimer;
$('.search').on('keyup', function() {
let phrase = $(this).val();
if (phrase.length > 0) {
clearTimeout(delayTimer);
delayTimer = setTimeout(function() {
$.ajax({
type: 'post',
url: '.......',
data: {
phrase: phrase
},
success: function (response) {
let el = $('#search-result');
if (response.type == 'success') {
el.html(response.html)
} else if (response.type == 'error') {
el.html(response.message)
}
},
complete: function() {
let el = $('#search-result');
if (el.is(':hidden')) {
el.slideDown(300)
}
}
});
}, 350);
} else {
let el = $('#search-result');
if (el.is(":visible")) {
el.stop().slideUp(300);
}
}
});
と答えてください。 私にとってはうまくいかなかった。フレーズの長さがゼロに等しいとき、要求のためのreadyStateは4でした。たぶん私はそれを間違っていました。 しかし、あなたは私の問題を解決するアイデアをくれました。 keyup関数の外で、また、phrase.length == 0の場合、変数setHtml = trueを設定しました:setHTML = false。以前の要求が完全な関数になったとき、私はsetHTMLをチェックできました。出来た。 – Glidarn