gpt4 book ai didi

javascript - 预输入搜索建议 undefined - Remote Ajax

转载 作者:行者123 更新时间:2023-11-30 05:33:41 24 4
gpt4 key购买 nike

我正在尝试将 typeahead 远程源制作成一个 web 方法,该方法将以 JSON 格式响应结果。

Ajax 取得了成功,并且正确地返回了结果。下面代码中的控制台将打印如下

[{"Id":"1","Value":"Midhun"},{"Id":"2","Value":"Midhun2"}]

但是预先输入的建议都是未定义的

var typeHeadEngine = new Bloodhound({ name: 'Name', remote: { url: 'page.aspx/method',

        ajax: {
type: "POST",
data: JSON.stringify({ "query": '%QUERY' }),
contentType: "application/json; charset=utf-8",
dataType: "text",
success: function (data) {
var obj = JSON.parse(data);
console.log(obj.d);
return obj.d;
}

}

},
datumTokenizer: function (d) {
return Bloodhound.tokenizers.whitespace(d.val);
},
queryTokenizer: Bloodhound.tokenizers.whitespace
});

typeHeadEngine .initialize();

$('.typeahead').typeahead({
hint: true,
highlight: true,
    minLength: 3
}, {
name: 'Name',
displayKey: 'Value',
source: typeHeadEngine.ttAdapter()

});

Web 方法正在返回在 ajax 成功函数中转换为数组的 JSON 字符串。在谷歌搜索期间,我发现 typeahead 需要数组而不是 JSON 对象,所以我正在转换为数组。

我经历了很多类似的问题来弄清楚。但是我做不到,
谁能帮忙弄清楚我在这里做错了什么?

最佳答案

你不应该使用 ajax 选项的 success 字段来转换你的 JSON,相反,您必须使用 Bloodhound 提供的 filter 字段:

var typeHeadEngine = new Bloodhound({
name: 'Name',
remote: {
url: 'page.aspx/method',
ajax: {
type: "POST",
data: JSON.stringify({
"query": '%QUERY'
}),
contentType: "application/json; charset=utf-8",
dataType: "text"
},
filter: function (data) {
var obj = JSON.parse(data);
console.log(obj.d);
return obj.d;
}
},
datumTokenizer: function (d) {
return Bloodhound.tokenizers.whitespace(d.val);
},
queryTokenizer: Bloodhound.tokenizers.whitespace
});

关于javascript - 预输入搜索建议 undefined - Remote Ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25306141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com