2010-09-16 50 views
0

我使用jQuery和PHP構建了一個very simple Twitter Instant Search以獲得樂趣。我將一個事件綁定到搜索表單上的關鍵字,並對捲起Twitter搜索JSON的PHP頁面進行快速AJAX調用。jQuery keyUp/AJAX獲取組合後始終1或2個衝程

<script> 
$(function(){ 
$('#search').bind('keyup', function(){ 
    var v = $('#search').val(); 
    console.log(v); 
    $.get('get.php',{q: v, a:''}, function(data){ 
    obj = {}; 
    window.tw = ''; 
    obj = eval('('+ data +')'); 
    if(typeof obj.results.length !== undefined){ 
    for (var i=0; i < obj.results.length; i++) { 
    tw += '<div class="tweet"><h2><a target="_blank" href="http://twitter.com/'+obj.results[i].from_user+'">@' + obj.results[i].from_user + '</a></h2> <span>' + obj.results[i].text + '</span><' + '/div>'; 
    }; 
    } 
    }); 
$('#container').html(window.tw); 
}); 

}); 
</script> 

即使返回的console.log值是正確的,就顯示的結果而言,它仍然落後於1-2個字符。爲什麼?我怎樣才能解決這個問題?

+0

對於JSON方面回調裏面,你可以使用函數'$ .getJSON'代替,並且返回值將是一個JSON對象默認。此外,對於任何地方的解析,您可以使用'$ .parseJSON'函數而不是使用'eval',而不需要添加圓括號。 – 2010-10-16 01:54:58

+0

@Zurahn是的,你完全正確;但我在出租車上寫了這個,所以沒有訪問jQuery文檔:) – Yahel 2010-10-16 14:15:07

回答

2
$('#container').html(window.tw); 

這應該是給$獲得()

$(function(){ 
    $('#search').bind('keyup', function(){ 
     var v = $('#search').val(); 
     console.log(v); 
     $.get('get.php',{q: v, a:''}, function(data){ 
      obj = {}; 
      window.tw = ''; 
         obj = eval('('+ data +')'); 
         if(typeof obj.results.length !== undefined){ 
       for (var i=0; i < obj.results.length; i++) { 
        tw += '<div class="tweet"><h2><a target="_blank" href="http://twitter.com/'+obj.results[i].from_user+'">@' + obj.results[i].from_user + '</a></h2> <span>' + obj.results[i].text + '</span><' + '/div>'; 
       }; 
      } 
      $('#container').html(window.tw);  
     }); 

    }); 
}); 
1

好像你正在發送AJAX請求。一旦你這樣做了,代碼將變爲異步,這意味着它可以以任何順序返回,具體取決於延遲。如果結果返回原始搜索字詞,則可以執行匹配以確保返回的結果與搜索框中的內容匹配。

+0

似乎沒有解決它; (obj.query == $('#search').val())現在它更偶爾地顯示結果 – Yahel 2010-09-16 17:59:20

1

您確定問題不在流程的get.php部分嗎?

編輯

嗯,我想我發現了問題。我想調用

$('#container').html(window.tw); 

需要是在$。獲得成功的回調,而不是在keyup事件的功能 - 因爲它是,在$不用彷徨前大火已返回任何所以它顯示的最後一組的反應。單個字母搜索不會返回任何結果。

+0

很確定;當我檢查AJAX調用時,他們都正確地形成了JSON(用於正確的查詢)被返回。 – Yahel 2010-09-16 17:56:50

+0

您的編輯是正確的,但@orderje在一分鐘內打敗了您正確的答案。 – Yahel 2010-09-16 18:15:05

+0

是的,我看到,只要我提交,猜我需要輸入更快:) – RickF 2010-09-16 18:40:03