Javascript jQuery response()函数不使用';由于变量范围的原因,无法返回任何结果
我遇到的问题是,由于变量范围,我无法从jQueryUIAutoComplete表单获得任何结果。让我给你看看Javascript jQuery response()函数不使用';由于变量范围的原因,无法返回任何结果,javascript,jquery,jquery-ui,jquery-ui-autocomplete,Javascript,Jquery,Jquery Ui,Jquery Ui Autocomplete,我遇到的问题是,由于变量范围,我无法从jQueryUIAutoComplete表单获得任何结果。让我给你看看 // TAKE A CLOSE LOOK AT THIS METHOD select: function(e, ui) { $('#instant-search').text(ui.item.label); $("#search").autocomplete("option", "source", function(req
// TAKE A CLOSE LOOK AT THIS METHOD
select: function(e, ui) {
$('#instant-search').text(ui.item.label);
$("#search").autocomplete("option", "source",
function(request, response) {
getAutocompleteResults(function(d) {
// DOESN'T WORK response(d);
});
// WORKS BUT IT SHOULD BE A DYNAMIC ARRAY FROM THE "D" OBJECT
// response(["anarchism", "anarchist black cross", "black rose (symbolism)", "communist symbolism", "political symbolism"]);
});
$("#search").autocomplete("search", ui.item.label);
为了返回结果,我必须使用函数response([…])代码>在getAutocompleteResults(函数(d){…})之外代码>函数
但是,源应该是动态的,而不像静态数组。换言之:
函数响应(d)代码>应返回一个对象,该对象包含一些属性(标题、值、提取)。我必须使用response(d)访问它们但是,此函数在getAutocompleteResults(函数(d){…})中不起作用代码>函数。我怎样才能做到这一点
但是,有一小部分代码,主要问题是select
方法。你可以在整个代码块的中间找到这个。我把它注释掉了。
$(函数(){
$(“html”).removeClass(“no js”);
var自动完成结果=[{
标题:[],
摘录:[],
页面ID:[]
}];
var capitalized firstletter=函数(字符串){
返回string.charAt(0.toUpperCase()+string.slice(1);
};
var changeText2=函数(e){
var request=$(“input”).val()+String.fromCharCode(e.which);
$(“#即时搜索”).text(请求);
var getAutocompleteResults=函数(回调){
$.ajax({
url:“https://en.wikipedia.org/w/api.php?format=json&action=query&generator=search&gsrlimit=6&prop=extracts&origin=*&pilimit=max&exintro&explaintext=1&gsrsearch=”+
$(“#即时搜索”).text(),
beforeSend:function(){
$(“.loading”).show();
},
成功:功能(d){
$(“.loading”).hide();
自动完成结果[0]。标题=[];
自动完成结果[0]。提取=[];
自动完成结果[0]。页面ID=[];
如果(d.hasOwnProperty(“查询”)){
if(d.query.hasOwnProperty(“页面”)){
$。每个(d.query.pages,函数(i){
自动完成结果[0].title.push(d.query.pages[i].title);
自动完成结果[0].extract.push(d.query.pages[i].extract);
自动完成结果[0].pageId.push(d.query.pages[i].pageId);
});
}
}
如果(!autocompleteResults[0].length){
$(“.ui自动完成”).hide();
}
自动完成结果[0]。标题。排序(函数(a,b){
var nameA=a.toUpperCase();
var nameB=b.toUpperCase();
if(nameA名称B){
返回1;
}
返回0;
});
autocompleteResults[0]。title=autocompleteResults[0]。title.map(
职能(一){
返回i.toLowerCase();
}
);
回调(自动完成结果[0]);
},
数据类型:“json”,
缓存:false
});
};
$(“#搜索”).autocomplete({
来源:功能(请求、响应){
getAutocompleteResults(函数(d){
var结果=[],
filteredAutocompleteResults=[];
filteredAutocompleteResults=d.title.filter(函数(i){
返回(
我=
$(“#即时搜索”)
.text()
.toLowerCase()
);
});
对于(变量i=0;i<div class="v-container">
<div class="v-content text-center">
<div class="wikisearch-container">
<div class="input ui-front">
<input type="text" id="search" placeholder="Search...">
<div class="loading">
<div class="lds-eclipse"></div>
</div>
<button class="icon">
<i class="fa fa-search"></i>
</button>
<table>
<tr>
<td class="fa fa-search"></td>
<td id="instant-search" class="three-dots"></td>
</tr>
</table>
</div>
<div class="search-results">
<h4></h4>
<p></p>
<a target="_blank">Click here for more</a>
</div>
</div>
</div>
</div>
$(function() {
var capitalizeFirstLetter = function(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
};
$("#search").autocomplete({
source: function(request, response) {
var results = [];
$.ajax({
url: "https://en.wikipedia.org/w/api.php",
data: {
format: "json",
action: "query",
generator: "search",
gsrlimit: 6,
prop: "extracts|pageimages",
origin: "*",
pilimit: "max",
exintro: false,
explaintext: false,
exsentences: 1,
gsrsearch: request.term
},
beforeSend: function() {
$(".loading").show();
},
success: function(d) {
$(".loading").hide();
if (d.query.pages) {
$.each(d.query.pages, function(k, v) {
console.log(k, v.title, v.extract, v.pageid);
results.push({
label: v.title,
value: "https://en.wikipedia.org/?curid=" + v.pageid,
title: v.title,
extract: v.extract,
pageId: v.pageid
});
});
response(results);
}
},
datatype: "json",
cache: false
});
response(results);
},
close: function() {
if (!$(".ui-autocomplete").is(":visible")) {
$(".ui-autocomplete").show();
}
},
focus: function(e) {
e.preventDefault();
return false;
},
delay: 0,
select: function(e, ui) {
if ($(".search-results").css("opacity") != 1) {
$(".search-results h4").text(capitalizeFirstLetter(ui.item.label));
$(".search-results p").text(ui.item.extract);
$(".search-results a").prop(
"href",
ui.item.value
);
$(".search-results").css("opacity", 1);
} else if (
$(".search-results h4")
.text()
.toLowerCase() != ui.item.label
) {
$(".search-results").css("opacity", 0);
setTimeout(function() {
$(".search-results h4").text(capitalizeFirstLetter(ui.item.label));
$(".search-results p").text(ui.item.extract);
$(".search-results a").prop(
"href",
ui.item.value
);
$(".search-results").css("opacity", 1);
}, 500);
}
return false;
}
}).autocomplete("instance")._renderItem = function(ul, item) {
var $item = $("<li>");
var $wrap = $("<div>").appendTo($item);
var $field1 = $("<div>", {
class: "autocomplete-first-field"
}).appendTo($wrap);
$("<i>", {
class: "fa fa-search",
"aria-hidden": true
}).appendTo($field1);
$("<div>", {
class: "autocomplete-second-field three-dots"
}).html(item.label).appendTo($wrap);
return $item.appendTo(ul);
};
});
$(selector).autocomplete({
source: function(req, resp){
var q = req.term;
// The Request is an object that contains 1 index: term
// request.term will contain the content of our search
var results = [];
// An array to store the results
$.getJSON("myapi.php", {query: q}, function(data){
$.each(data, function(key, val){
// iterate over the result data and populate our result array
results.push({
label: data.name,
value: data.url
});
resp(results);
});
});
}
});