我使用了来自http://jqueryui.com/autocomplete/#remote-jsonp的Jquery自动完成示例。我已经包含了参考站点中的所有特定代码,但这在我的本地不起作用。 我只想在公司名称中搜索。
Here i am attaching image to get the exact idea what i am getting
<script>
$( function() {
function log( message ) {
$( "<div>" ).text( message ).prependTo( "#log" );
$( "#log" ).scrollTop( 0 );
}
$( "#company_name" ).autocomplete({
source: "http://localhost:5050/api/v1/web-customer-list",
type: "GET",
minLength: 1,
autoSelect: true,
autoFocus: true,
dataType : "json",
response: function( event, ui ) {
var responseObj = ui.content[0];
var companyNameList = [] ;
for(var i = 0 ; i<= 6 ; i ++){
companyNameList.push(responseObj[i].company.company_name) ;
}
},
select: function( event, ui ) {
console.log(event);
console.log(ui);
log( "Selected: " + ui.item.company.company_name + " aka " + ui.item.id );
}
});
} );
</script>
答案 0 :(得分:1)
我已经分解了这个例子并做了一些调整以适应你的表现。
工作示例:https://jsfiddle.net/Twisty/0Lajrcfv/
<强> HTML 强>
<div class="ui-widget">
<label for="companyName">Company Name: </label>
<input id="companyName">
</div>
<div class="ui-widget" style="margin-top:2em; font-family:Arial">
Result:
<div id="log" style="height: 200px; width: 300px; overflow: auto;" class="ui-widget-content"></div>
</div>
<强>的jQuery 强>
$(function() {
function log(message) {
$("<div>").text(message).prependTo("#log");
$("#log").scrollTop(0);
}
$("#companyName").autocomplete({
source: function(req, resp) {
var companyNameList = [];
$.ajax({
//url: "http://localhost:5050/api/v1/web-customer-list",
//type: "GET",
url: "/echo/json/",
type: "POST",
data: {
json: JSON.stringify({
company: {
company_name: [
"Apple",
"Google",
"IBM",
"HP",
"Yahoo!",
"AltaVista",
"Yelp",
"2600"
]
}
})
},
dataType: "json",
success: function(respObj) {
for (var i = 0; i <= 6; i++) {
companyNameList.push({
id: i,
value: respObj.company.company_name[i]
});
}
resp(companyNameList);
}
});
},
minLength: 1,
autoSelect: true,
autoFocus: true,
select: function(event, ui) {
log("Selected: " + ui.item.value + " aka " + ui.item.id);
}
});
});
因此,从示例中可以看出,source
选项可以接受来自字符串或回调函数的响应。回调函数传递了两个参数request
和response
。
回调有两个参数:
request
对象,具有单个术语属性,该属性引用文本输入中当前的值。例如,如果用户输入&#34; new yo&#34;在城市字段中,自动填充术语将等于&#34; new yo&#34;。一个
response
回调,它需要一个参数:向用户建议的数据。应根据提供的术语过滤此数据,并且可以采用上述任何简单本地数据格式。在提供自定义源回调以处理请求期间的错误时,这一点非常重要。即使遇到错误,也必须始终调用响应回调。这可确保窗口小部件始终具有正确的状态。
根据您的代码,看起来您不会过滤客户端,您只是接受来自GET
请求返回的前6名。所以我们在示例中忽略req.term
。我们只关心收集结果,正确格式化并将其返回resp()
。
对于我的工作示例,我们POST
数据,因此它可以作为响应回显。根据您的示例,您需要某种类型的对象,大致类似于:
[{
company: {
company_name
}
}]
如果您希望自己的版本正常工作,可以通过GET
调用网址,则返回的数据应为:
具有标签和值属性的对象数组:
[ { label: "Choice1", value: "value1" }, ... ]
例如:
[{
label: "Apple",
value: 1
},
{
label: "Google",
value: 2
}];
我希望这会有所帮助。