如何在Quora中实现前缀匹配的实时自动完成功能?
由于Solr和Sphinx不支持实时更新,所以进行了哪些更改以支持实时更新?
答案 0 :(得分:1)
看起来它是使用javascript和jquery完成的。我从Quora主页上的缩小脚本中抓了几个关键线,我认为支持这个理论:
这是对提供JSON数据的资源的ajax调用:
$.ajax({type:"GET",url:this.resultsQueryPath,dataType:"json",data:a,success:this.fnbind(ƒ(a){this.ajaxCallback(a)}),error:this.fnbind(ƒ(a,b,c){console.log(b,c),this.requestOutstanding=!1,this.$("#@results_shell").html("Could not retrieve results: "+b)})})}
请注意,成功的结果会被放入“a”变量中。然后,这里是基于“question_box”元素的keydown的自动完成,该元素从“a”的父级完成
this.$ ("#@item input.question_box").keydown (ƒ (b) {
if (b.keyCode==9&&!b.shiftKey)for (var c=e.getLiveDomId (a.cid),d=a.parent ().orderedVisibleChildren (),f\^M=0;f<d.length-1;++f)if (c==d [f]) {
$ (this).blur (),$ ("#"+d [f+1]+" input.question_box").focus ();return!1}
})
我认为这是非常无可争议的,但是将未缩小的脚本进行比较仍然会很好。例如,我无法看到resultsQueryPath来自哪里(我无法找到它的来源,可能会被故意混淆)。