【问题标题】:Bloodhound remote queries works but doesn't suggest anythingBloodhound 远程查询有效,但没有任何建议
【发布时间】:2015-05-10 14:37:55
【问题描述】:

我使用 Bloodhound 作为预输入的建议引擎。

问题是当我在猎犬中使用远程源时。它进行查询并获取结果,但是当我搜索结果时没有返回任何内容。

更具体地说,这段代码可以正常工作:

    categoryEngine = new Bloodhound({                                                                                                                                                                          
        queryTokenizer: Bloodhound.tokenizers.whitespace,                                                                                                                                                      
        datumTokenizer: Bloodhound.tokenizers.obj.whitespace('title'),                                                                                                                                         
        local: [{                                                                                                                                                                                              
            id: 1,                                                                                                                                                                                             
            title: 'Pizza'                                                                                                                                                                                     
        },                                                                                                                                                                                                     
        {                                                                                                                                                                                                      
            id: 2,                                                                                                                                                                                             
            title: 'Pasta'                                                                                                                                                                                     
        }                                                                                                                                                                                                      
        ]                                                                                                                                                                                                      
    });                                                                                                                                                                                                        
    categoryEngine.initialize();                                                                                                                                                                               
    categoryEngine.search('Pi', function(s) {                                                                                                                                                                  
        console.log('food='+JSON.stringify(s));                                                                                                                                                                
    });   

它会在控制台中记录food=[{"id":1,"title":"Pizza"}],这是正确的。 但是这个带有远程源:

    categoryEngine = new Bloodhound({                                                                                                                                                                          
        queryTokenizer: Bloodhound.tokenizers.whitespace,                                                                                                                                                      
        datumTokenizer: Bloodhound.tokenizers.obj.whitespace('title'),                                                                                                                                         
        remote: {                                                                                                                                                                                              
           url: '/complete/category_title/%QUERY',                                                                                                                      
            wildcard: '%QUERY'                                                                                                                                                                                 
        }                                                                                                                                                                                                      
    });                                                                                                                                                                                                        
    categoryEngine.initialize();                                                                                                                                                                               
    categoryEngine.search('Pi', function(s) {                                                                                                                                                                  
        console.log('food='+JSON.stringify(s));                                                                                                                                                                
    });

向服务器发出请求:

GET /complete/category_title/Pi HTTP/1.1
Host: XXXXX
Connection: keep-alive
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36
Referer: YYYYY
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8,fa;q=0.6
Cookie: PHPSESSID=ZZZZZ

并接受此响应:

HTTP/1.1 200 OK
Host: XXXXX
Connection: close
X-Powered-By: PHP/5.6.8
Cache-Control: no-cache
Date: Sun, 10 May 2015 14:24:22 GMT
Content-Type: application/json

[{"id":13,"title":"Pizza"}]

这似乎也是正确的,但search 方法不起作用,并且调试行在控制台中打印food=[],因为它没有返回任何结果。

我正在使用这些库:

  • jQuery v1.11.2
  • jQuery 迁移 v1.2.1
  • jQuery UI v1.11.2
  • 引导程序 v3.3.1
  • Typeahead v0.11.1

【问题讨论】:

  • 遇到同样的问题,有什么好的解决办法吗?

标签: jquery twitter-bootstrap typeahead.js bloodhound


【解决方案1】:

从表面上看,问题在于 Bloodhound.search 在第二个回调(第三个参数)(Bloodhound.search)中返回异步(远程)结果。 您应该将代码更改为:

var cb = function(s) {console.log('food='+JSON.stringify(s));};
categoryEngine.search('Pi', cb, cb);

【讨论】:

  • 谢谢,它有效!我使用了带有 typeahead 的建议引擎,并给它 categoryEngine.ttAdapter() 作为它的源,尽管发生了同样的问题。我可以使用这种方法并自己编写预先输入的源函数。但是代码会很丑陋,我的问题是this example 是如何工作的,而我的却不是?
猜你喜欢
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 2018-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-25
相关资源
最近更新 更多