Jquery ui自动完成 - 建议使用外部json

时间:2017-02-07 11:54:01

标签: jquery-ui autocomplete

我正在使用jquery ui自动完成。

我的问题是当我使用外部json的调用时,建议功能停止工作。

$(document).ready(function() {
  $('.comu').autocomplete({
    source: function(request, response) {
      $.ajax({
        url: "https://raw.githubusercontent.com/edusl/test/master/municipios1.json",
        dataType: "json",
        success: response
      });
    },
    minLength: 0,
    autoFocus: true,
    select: function(event, ui) {
      event.preventDefault();
      $(".comu").val(ui.item.label);
    },
  });
});

我的代码示例:codepen

提前致谢!

1 个答案:

答案 0 :(得分:0)

我怀疑你可能已经找到了回复此问题的人。但是这里有一个解决方案。

$(document).ready(function() {
  $('.comu').autocomplete({
    source: function(request, response) {
      $.ajax({
        url: "https://raw.githubusercontent.com/edusl/test/master/municipios1.json",
        dataType: "json",
        success: function(jData) {
          var results = [];
          $.each(jData, function(ind, val) {
            if (val.label.toLowerCase().indexOf(request.term) === 0) {
              results.push(val);
            }
          });
          response(results);
        }
      });
    },
    minLength: 0,
    autoFocus: true,
    select: function(event, ui) {
      event.preventDefault();
      $(".comu").val(ui.item.label);
    },
  });
});

工作示例:https://jsfiddle.net/Twisty/mL3h8pm0/

AJAX请求将返回所有结果,这就是您传递给response的内容。因此,如果您在将其传递给response之前没有对其进行过滤,那么您将始终获得完整的列表。

这会使用indexOf()过滤列表,但您可以使用任何您喜欢的方法。

这是另一个可以减少HTTP开销的解决方案:

var m = [];
$(document).ready(function() {
  $.getJSON("https://raw.githubusercontent.com/edusl/test/master/municipios1.json", function(result) {
    $.each(result, function(ind, val) {
      m.push(val);
    });
  });

  $('.comu').autocomplete({
    source: m,
    minLength: 0,
    autoFocus: true,
    select: function(event, ui) {
      event.preventDefault();
      $(".comu").val(ui.item.label);
    },
  });
});

工作示例:https://jsfiddle.net/Twisty/mL3h8pm0/2/

这将获取所有数据并填充数组。然后,自动填充可以像平常一样使用它。