jQuery 客户端自动完成不显示结果
jQuery Autocomplete Not Showing Results on Client-Side
我的结果没有在 jQuery UI 支持的自动完成中填充。我只是在搜索栏下方看到空行,有时它们甚至不显示。
当我在搜索字段中键入字符时,我确实在控制台 window 中看到了我的结果。我不知道我做错了什么。
我的客户端代码是这样设置的:
<input id="autocomplete" class="form-control input-lg" name="autocomplete" placeholder="Search an address" type="text">
$('#autocomplete').autocomplete({
source: function(request, response) {
$.getJSON('{{url_for("getInfo")}}', {
a: request.term,
}, function(data) {
console.log(data);
response(data.addresses);
});
},
minLength: 3,
select: function(event, ui) {
console.log(ui.item.value);
}
});
我可以看到 console.log(data);
行的结果。它 returns 一个包含 3 个项目的数组的对象:Object {addresses: Array[3]}
我使用 Flask 的服务器端代码是这样设置的:
@app.route('/getInfo', methods=['GET'])
def getInfo():
address = request.args.get("a")
addressCollection = myDB["addresses"]
addressJSON = []
for address in addressCollection.find({'Address': {'$regex':regex,'$options':'i'} },{"Address":1,"_id":0}).limit(3):
addressJSON.append({"Address":address["Address"]})
return jsonify(addresses=addressJSON)
结果如下所示:
{
"addresses": [
{
"Address": "29 Valleyridge Rd",
},
{
"Address": "29 Valleyview Dr",
},
{
"Address": "29 Valleystone Cr",
}
]
}
jQuery UI 自动完成 source 需要一个字符串数组,或者一个具有 label
和 value
属性的对象数组。所以你应该相应地转换你的数据。你的成功回调应该是这样的:
function(data) {
var transformed = data.addresses.map(function(address) {
return address.Address;
});
response(transformed);
}
或者
function(data) {
var transformed = data.addresses.map(function(address) {
return {
label: address.Address
};
});
response(transformed);
}
我的结果没有在 jQuery UI 支持的自动完成中填充。我只是在搜索栏下方看到空行,有时它们甚至不显示。
当我在搜索字段中键入字符时,我确实在控制台 window 中看到了我的结果。我不知道我做错了什么。
我的客户端代码是这样设置的:
<input id="autocomplete" class="form-control input-lg" name="autocomplete" placeholder="Search an address" type="text">
$('#autocomplete').autocomplete({
source: function(request, response) {
$.getJSON('{{url_for("getInfo")}}', {
a: request.term,
}, function(data) {
console.log(data);
response(data.addresses);
});
},
minLength: 3,
select: function(event, ui) {
console.log(ui.item.value);
}
});
我可以看到 console.log(data);
行的结果。它 returns 一个包含 3 个项目的数组的对象:Object {addresses: Array[3]}
我使用 Flask 的服务器端代码是这样设置的:
@app.route('/getInfo', methods=['GET'])
def getInfo():
address = request.args.get("a")
addressCollection = myDB["addresses"]
addressJSON = []
for address in addressCollection.find({'Address': {'$regex':regex,'$options':'i'} },{"Address":1,"_id":0}).limit(3):
addressJSON.append({"Address":address["Address"]})
return jsonify(addresses=addressJSON)
结果如下所示:
{
"addresses": [
{
"Address": "29 Valleyridge Rd",
},
{
"Address": "29 Valleyview Dr",
},
{
"Address": "29 Valleystone Cr",
}
]
}
jQuery UI 自动完成 source 需要一个字符串数组,或者一个具有 label
和 value
属性的对象数组。所以你应该相应地转换你的数据。你的成功回调应该是这样的:
function(data) {
var transformed = data.addresses.map(function(address) {
return address.Address;
});
response(transformed);
}
或者
function(data) {
var transformed = data.addresses.map(function(address) {
return {
label: address.Address
};
});
response(transformed);
}