Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Typeahead.js远程工作,但预取不工作';T_Javascript_Jquery_Typeahead.js_Twitter Typeahead - Fatal编程技术网

Javascript Typeahead.js远程工作,但预取不工作';T

Javascript Typeahead.js远程工作,但预取不工作';T,javascript,jquery,typeahead.js,twitter-typeahead,Javascript,Jquery,Typeahead.js,Twitter Typeahead,我正在我的web应用程序中使用typeahead.js 0.10.5。出于某些奇怪的原因,通过远程工作实时获取建议,而预取被中断。这里发生了一些不明显和奇怪的事情。根据开发者控制台和Chrome的网络监视器,它甚至没有对页面加载进行查询。当然,当我开始打字时,它会进行查询 这真的让我很困惑——我做错了什么 // Instantiate the Bloodhound suggestion engine var tags = new Bloodhound({ datumT

我正在我的web应用程序中使用typeahead.js 0.10.5。出于某些奇怪的原因,通过远程工作实时获取建议,而预取被中断。这里发生了一些不明显和奇怪的事情。根据开发者控制台和Chrome的网络监视器,它甚至没有对页面加载进行查询。当然,当我开始打字时,它会进行查询

这真的让我很困惑——我做错了什么

    // Instantiate the Bloodhound suggestion engine
    var tags = new Bloodhound({
      datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
      queryTokenizer: Bloodhound.tokenizers.whitespace,
      remote: {
        url: '/tags/tags/search.json?q=%QUERY',
        filter: function (taglist) {
            // Map the remote source JSON array to a JavaScript object array
            return $.map(taglist, function (tag) {
                console.log(tag);
                return {
                    value: tag.tag
                };
            });
        }
      },
      prefetch: {
        url: '/tags/tags/search.json?q=',
        filter: function (taglist) {
            // Map the remote source JSON array to a JavaScript object array
            return $.map(taglist, function (tag) {
                console.log(tag);
                return {
                    value: tag.tag
                };
            });
        },      
      }
    });

    // Initialize the Bloodhound suggestion engine
    tags.initialize();

    // Instantiate the Typeahead UI
    $('#search-tags').typeahead(null, {
        displayKey: 'value',
        source: tags.ttAdapter(),
        hint: true,
        highlight: true
    });

尝试从浏览器的本地存储中删除条目并重新启动。

默认情况下,侦探犬对象会在浏览器的本地存储中缓存预取的数据,为其分配1天的TTL(生存时间),并且在TTL过期之前不会重新验证它。初始化侦探犬对象时,可以通过设置“cache:false”和/或“ttl:1000”(毫秒)更改默认值

预取是相关的,但与缓存略有不同,因为预取的数据不受服务器发送的缓存控制头的约束。它还存在于本地存储中,而不是浏览器的缓存中(这就是为什么硬重新加载或缓存清除不会导致重新获取它)

另一方面,远程获取的文件根据缓存控制头进行重新验证。因此,如果服务器允许,浏览器仍然可以缓存它们。但是,它们存储在缓存中,而不是本地存储中


LocalStorage中存在每个域的空间限制(请参阅),因此大型预取将失败,尽管我不知道typeahead是否会正常失败(即,使用数据,即使它无法存储数据)。

尝试从浏览器的LocalStorage中删除条目,然后重新开始。嗯,我尝试使用Chrome的“删除最近的活动”但这并没有起作用,但在手动从本地存储中删除密钥后,它起作用了。将此作为答案发布,我会将其标记为正确。