Typeahead问题 - Ajax只返回一次Json数据

时间:2014-06-26 12:45:30

标签: javascript jquery ajax json typeahead

我用Twitter的Typeahead插件将头发拉了几个小时。

基本上,我们从响应格式为.JSON的Web服务(Asmx webservice)中提取数据。

一旦我们通过BloodHound获取它,我们然后将其转换为字符串,删除一些其他字符,然后将其重新转换为Json,然后将其传递给Typeahead。

 var engine= new Bloodhound({
        datumTokenizer: function (d) {
            return Bloodhound.tokenizers.whitespace("value")
        },
        queryTokenizer: Bloodhound.tokenizers.whitespace,
        prefetch : {
            ttl : 1000,
            url : '/webservice.asmx'
        },
        remote: {
            ttl : 1000,
            url: '/webservice.asmx',
            ajax: {
                beforeSend: function (jqXhr, settings) {
                    jqXhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
                    settings.data = '{"query":"' + $('#inputText').val() + '"}';
                    alert(settings.data);
                },
                type: "POST",
                context: this
            },
            filter: function (response) {
                //return response;
                if (response.hasOwnProperty('d')) {

                    var returned = String(response.d);
                    returned = returned.slice(14,-1);

    var parsedJSON =     jQuery.parseJSON(returned);
                    return  parsedJSON ;
                }
                else {
                    return response;
                }
            }
        }
    });

    engine.initialize();

    $('#inputText').typeahead(null, {
        source: engine.ttAdapter()
    });

在输入字段中键入时,代码通过Ajax ONCE和ONCE ONLY基于查询获取数据,但是当用户在输入框中键入更多字符时,它会多次通过过滤器。我相信这是问题所在。因为使用Asmx webservice的方法我们必须使用一种POST,所以无论我们在输入框中键入多少个字符,Ajax似乎都不能生成多个请求。

正如我所说,这让我们疯狂了几天,所以任何帮助都会令人难以置信。

1 个答案:

答案 0 :(得分:0)

此博客帮助解决了问题 - http://www.weezey.com/2014/03/bringing-it-all-together/

看起来我们过分复杂了一些事情。我们仍然不得不剥离并重新转换我们的Web服务器在Ajax部分中回放的Json,但我们让它工作了。