Jquery 自动完成 returns 结果,但结果未显示任何内容

Jquery autocomplete returns result, but result is not showing anything

我在使用 jQuery 自动完成时遇到问题。我正在使用下面的函数来获取 inputACCO_KEY 的结果。 问题是,我没有看到结果——但显然函数返回了一些东西,因为我在 div 下面看到了自动完成表单——但它总是空的。有时它更长,有时更短(取决于返回多少结果),但它总是空的。如果我 select 来自那个空 table 的东西,输入中显示的结果也是空的。

函数:

$("#inputACCO_KEY").autocomplete({
      source: function (request, response) {
        $.ajax({
          method: 'post',
          url: "/wsSearchCAMERC/GetCAACCOSearchAll/",          
          data: {
            prefixText: $("#inputACCO_KEY").val(),
            count: 30
          },
          dataType: 'json',
          success: function (data) {
            response($(data).map(function (item, i) {              
              return {                
                label: item.First,
                value: item.Second
              };
            })
            );
          },
          error: function (data) {
            alert('error');
          }
        });
      },
      minLength: 3,
      select: function (event, ui) {        
        log("Selected: " + ui.item.value + " aka " + ui.item.id);
      }
    });
  });

结果类型:

    ["{"First":"BOŠTJA S.P.","Second":"160001670"}", 
"{"First":"GOLF KLUB","Second":"110001615"}", "{"First":"IRENA","Second":"150001322"}"]

Result is of type:

["{"First":"BOŠTJA S.P.","Second":"160001670"}", "{"First":"GOLF KLUB","Second":"110001615"}", "{"First":"IRENA","Second":"150001322"}"]

这听起来很奇怪。我假设内部字符串分隔符被转义,所以你有一个字符串数组。 如果是这种情况,您需要将地图功能更改为:

var data = ["{\"First\":\"BOŠTJA S.P.\",\"Second\":\"160001670\"}", "{\"First\":\"GOLF KLUB\",\"Second\":\"110001615\"}", "{\"First\":\"IRENA\",\"Second\":\"150001322\"}"];
var result = $(data).map(function (idx, ele) {
    var item = JSON.parse(ele);
    return {
        label: item.First,
        value: item.Second
    };
});

console.log(result);

$( "#tags" ).autocomplete({
    source: function (request, response) {
        var data = ["{\"First\":\"BOŠTJA S.P.\",\"Second\":\"160001670\"}", "{\"First\":\"GOLF KLUB\",\"Second\":\"110001615\"}", "{\"First\":\"IRENA\",\"Second\":\"150001322\"}"];
        response($(data).map(function (idx, ele) {
            var item = JSON.parse(ele);
            return {
                label: item.First,
                value: item.Second
            };
        }));
    }
});
<link href="https://code.jquery.com/ui/1.12.0/themes/smoothness/jquery-ui.css" rel="stylesheet"/>
<script src="https://code.jquery.com/jquery-1.12.3.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script>


<div class="ui-widget">
    <label for="tags">Tags: </label>
    <input id="tags">
</div>

Select 方法必须 return false。否则,它不会像预期的那样工作。

完整的工作示例:

$("#inputACCO_KEY").autocomplete({
      source: function (request, response) {
        $.ajax({
          method: 'post',
          url: "/wsSeCAMERC/GetCA/",
          data: {
            prefixText: $("#inputACCO_KEY").val(),
            count: 30
          },
          dataType: 'json',
          success: function (data) {
            response($.map(data, function (item, i) {
              return {
                label: item.cACCO_NME,
                value: item.iACCO_KEY
              };
            })
            );
          },
          error: function (data) {
            alert('error!');
          }
        });
      },
      minLength: 3,
      select: function (event, ui) {
        $("#inputACCO_KEY").val(ui.item.label);
        $("#iACCO_KEY").val(ui.item.value);
        return false;
      }
    });
  });