2012-05-13 121 views
0

我是一個新手,當涉及到jQuery,我正在盡我所能瞭解它。以下是兩段代碼,我將非常感謝您的反饋意見。我的最終目標是輸入到要查詢的框中,我將分別用下面的兩段代碼分別討論這兩個問題。jQuery的阿賈克斯搜索請求

function update_results(){ 
$.ajax({ 
    url: '{base}modules/search.php?q=' + $("#q").val(), 
    success: function(data) { 
    $('#q').bind('keyup', function() { $('#results').fadeIn(400).delay(500).html(data); }).keyup(); 
} 
}); 
} 

這段代碼一旦請求被扔進與服務器的循環,導致瀏覽器顯著放緩,但完美的作品(與輸入的字符保持向上)。

function update_results(){ 
$.ajax({ 
    url: '{base}modules/search.php?q=' + $("#q").val(), 
    success: function(data) { 
    $('#q').bind('keyup', function() { $('#results').fadeIn(400).delay(500).html(data); }); 
} 
}); 
} 

這段代碼沒有循環的問題,但每當我鍵入發送到我的search.php頁面查詢總是缺少最後兩三個字符。

這裏是觸發以上任兩種情形的HTML元素:

<h3>Site Search</h3> 
    <input id="q" type="text" onkeyup="update_results()" value="Type in a search term..." onFocus="this.value='';" /><br> 
    <a href="javascript:clear_results();">(Reset)</a> | <a href="search/">(Advanced Search)</a> 
    <div id="results" style="text-align: left; font-size: 11px;"></div></center> 
    </div> 

所有我想是在#q中的內容將被髮送到search.php中Q =和呢?返回數據並將其放置在#results div中。我還希望在那裏放置某種計時器,以便在某人按照任意時間值或每隔幾秒鐘指定完成打字後,每次輸入字符時都不會詢問服務器。一旦這個人完成打字,顯然我希望它停止錘擊服務器。

我在網上看了一圈,我很抱歉,如果它看起來像我還沒有做過任何研究。相反,我剛剛在昨天才開始學習jQuery。

感謝您的時間,如果這是一個真正的新手問題,我很抱歉。

回答

0

你總是落後幾個字符的原因可能與此有關。

success: function(data) { 
    $('#q').bind('keyup', function() { $('#results').fadeIn(400).delay(500).html(data); }).keyup(); 
} 

這些「綁定」操作堆積如山,每當AJAX請求返回更多結果時。所以每次觸發按鍵操作時,都會設置所有這些不同的結果集。我不確定這是否合理,但這不是最簡單的代碼。

嘗試改變這部分只是

success: function(data) { 
    $('#results').show().html(data); 
} 

如果看起來更好,請嘗試使用淡入()和延遲以爲靠着它()。

你可能需要添加另一件事情是這樣的:

$('#q').blur(function(){ $('#results').hide() }); 

這將使這樣,當你離開文本字段(模糊),它會隱藏結果。

+0

這工作很好,很簡單。非常感謝你的時間和耐心! (哦,我確實刪除了show()部分,因爲它並不適用於此 - 只是爲了讓其他人知道)。 – elixeus