将 HTTP POST 与 typeahead js 和 Bloodhound js 结合使用

2024-03-06

默认情况下,bloodhound.js 将通过 HTTP GET 进行查询,但这使您容易受到JSON劫持 http://haacked.com/archive/2009/06/25/json-hijacking.aspx/。由于我想将敏感信息加载到预先输入中,因此 HTTP GET 让我很容易受到攻击。曾经有一个选择帖子的选项(如下所示:typeahead.js 远程 beforesend post 数据问题 https://stackoverflow.com/questions/18874121/typeahead-js-remote-beforesend-post-data-issue),但这不适用于最新版本(v.0.11.1)。


我花了很多心痛和尝试才得到这个。在最新版本(v.0.11.1)中有一个transport函数选项,你可以使用它来委托给你想要的任何东西(websockets,或者普通的旧的$.ajax与一个帖子)。

var accountBloodhound = new Bloodhound({
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
    queryTokenizer: Bloodhound.tokenizers.whitespace,

    remote: {
        url: '/account/search#%QUERY',
        wildcard: '%QUERY',
        transport: function (opts, onSuccess, onError) {
            var url = opts.url.split("#")[0];
            var query = opts.url.split("#")[1];
            $.ajax({
                url: url,
                data: "search=" + query,
                type: "POST",
                success: onSuccess,
                error: onError,
            })
        }
    }
});

$('#remote .typeahead').typeahead(null, {
    name: 'best-pictures',
    display: 'value',
    source: accountBloodhound 
}).bind('typeahead:select', function (ev, suggestion) {
    console.log('Selection: ' + suggestion);
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 HTTP POST 与 typeahead js 和 Bloodhound js 结合使用 的相关文章