无法将对象数组映射到 jQuery 自动完成

Unable to map array of object into jQuery autocomplete

我正在将 jQuery 自动完成插件添加到我的项目中。我有一个源值,它是一个对象数组(来自 mySQL 数据库)。我无法将它们映射到所需的自动完成格式。

这是要映射的数据:

[{
  "value": "730",
  "label": "iPhone"
}, {
  "value": "731",
  "label": "Screen Protector"
}, {
  "value": "732",
  "label": "Maxboost"
}, {
  "value": "733",
  "label": "JETech"
}, {
  "value": "734",
  "label": "Mr Shield"
}]
$("#product_one").autocomplete({
  source: $.ajax({
    type: "GET",
    url: "/wp-json/product/product-info/",
    success: function(res) {
      $.each(res, function(key, val) {
        return {
          "label": val.label,
          "value": val.value
        }
      });
    }
  });
});

如有任何建议或修改问题,我们将不胜感激。

问题是因为您向 source 提供了一个 jqXHR 对象,而不是它所期望的数组、字符串或函数 (docs)

考虑到 AJAX 的使用,提供一个使用 requestresponse 参数的函数对您来说最有意义。另请注意,由于您检索的数据已经采用正确的格式(即具有 labelvalue 属性的对象数组),您可以直接将其提供给 response() 而无需循环通过它。试试这个:

$("#product_one").autocomplete({
  source: function(request, response) {
    $.ajax({
      type: "GET",
      url: "/wp-json/product/product-info/",
      success: function(data) {
        response(data);
      }
    });
  }
});

您应该首先加载您的数据,然后将它们设置为自动完成的来源。

$.ajax({               
      type:"GET",
      url: "/wp-json/product/product-info/",
      success:function(res){

           //Based on your object creation, it looks that you can directly use the response
           $( "#product_one" ).autocomplete(res);   

      }
});