【问题标题】:JQuery Autocomplete didn't work when using JSON使用 JSON 时 JQuery 自动完成功能不起作用
【发布时间】:2026-02-04 02:35:01
【问题描述】:

我想创建一个自动完成文本字段来显示名称并在我选择其中一个时获取值。

我正在学习本网站的教程

here

和成功。工作代码是这样的:

var data = [
        { value: "AL", label: "Alabama" },
        { value: "AK", label: "Alaska" },
        { value: "AZ", label: "Arizona" }
];
$(function() {
        $("#autocomplete2").autocomplete({
            source: data,
            focus: function(event, ui) {
                event.preventDefault();
                $(this).val(ui.item.label);
            },
            select: function(event, ui) {
                event.preventDefault();
                $(this).val(ui.item.label);
                $("#autocomplete2-value").val(ui.item.value);
            }
        });
    });

我想用我的 JSON 替换上面写的 var 数据。 这是我的 JSON 的样子

[{"value":"1","label":"Gambir"},{"value":"2","label":"Kebon Kelapa"},{"value":"3","label":"Petojo Utara"}]

我想这样做

var data = [
        here would be data from my json,
        the JSON url: app.base_url+'adm/pengiriman/pengiriman_kodepos'
        how to write code to retrieve JSON in here?
];
$(function() {
    $("#autocomplete2").autocomplete({
        source: data,
        focus: function(event, ui) {
            event.preventDefault();
            $(this).val(ui.item.label);
        },
        select: function(event, ui) {
            event.preventDefault();
            $(this).val(ui.item.label);
            $("#autocomplete2-value").val(ui.item.value);
        }
    });
});

但是,这样做的正确方法是什么? 我尝试从此修改源代码:

source: data,

变成这样:

source: function (request, response) {
    $.getJSON(app.base_url+'adm/pengiriman/pengiriman_kodepos', function (data) {
         response($.map(data, function (value, key) {
             return {
                 label: value,
                 value: key
             };
          }));
     });
},

或者这个:

source: function(request, response) {
              $.ajax({
                url: app.base_url+'adm/pengiriman/pengiriman_kodepos',
                dataType: "json",
                data: { q: request.term },
                success: function(data) {
                  response($.map(data, function(value,key) {
                    return { label:value.label , value: value.value }
                  }));
                }
              });
            },

或者这个:

source: app.base_url+'adm/pengiriman/pengiriman_kodepos',

仍然没有运气.. 我对 JQuery 和 JSON 都很陌生 感谢您的帮助..

【问题讨论】:

    标签: javascript php jquery json autocomplete


    【解决方案1】:

    异步 ​​ajax 请求,因此您必须使用回调并在其中创建自动完成 ui。请看下面的代码。未经测试,因此您可能需要调整代码,但可以这样做。

    function getData(responseCallback) {
      $.getJSON(app.base_url + 'adm/pengiriman/pengiriman_kodepos', function(data) {
        responseCallback(data);
      });
    }
    
    
    function createAutocomplete(data) {
      $("#autocomplete2").autocomplete({
        source: data,
        focus: function(event, ui) {
          event.preventDefault();
          $(this).val(ui.item.label);
        },
        select: function(event, ui) {
          event.preventDefault();
          $(this).val(ui.item.label);
          $("#autocomplete2-value").val(ui.item.value);
        }
      });
    }
    
    getData(createAutocomplete);
    

    我在这里创建了一个示例:https://jsbin.com/subihohuje/1/edit?html,output

    它从https://jsonblob.com/api/9ae66445-f11b-11e6-901d-295e753a8fe1获取数据

    【讨论】:

    • 感谢您的回复。我尝试了那个代码,还没有工作,没有错误..你调整代码是什么意思?是否有任何可能的方法来获取 JSON 数组并将其替换为代码 var data = [ { value: "AL", label: "Alabama" }, { value: "AK", label: "Alaska" }, {值:“AZ”,标签:“亚利桑那州”}];
    • 如果可以创建jsbinjsfiddle可以快速解决。
    • 您不能直接用 json 替换 data,因为对服务器的请求是异步的。
    • 这是我的 jsfiddle 工作示例,没有 json..jsfiddle.net/m5za8oz5/2
    【解决方案2】:

    不确定你的意思。 只需用您的 json 替换 json

    【讨论】:

    • 这就是我真正想做的。替换 var data = [ { value: "AL", label: "Alabama" }, { value: "AK", label: "Alaska" }, { value: "AZ", label: "Arizona" } ];使用来自 url 的 json:app.base_url+'adm/pengiriman/pengiriman_kodepos' 我会继续尝试