Javascript jQuery response()函数不使用';由于变量范围的原因,无法返回任何结果

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

我遇到的问题是,由于变量范围,我无法从jQueryUIAutoComplete表单获得任何结果。让我给你看看

// 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);
      });
    });
  }
});