2010-09-16 49 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