jQuery ui 使用 json 文件自动完成

Posted

技术标签:

【中文标题】jQuery ui 使用 json 文件自动完成【英文标题】:jQuery ui auto complete with json File 【发布时间】:2017-12-03 12:50:35 【问题描述】:

我正在尝试从 JSON 文件中获取数据 jquery ui autocomplete is not working 。这是我的 JSON 数组

[
 
   "FIELD1": "A",
   "FIELD2": "B",
   "FIELD3": "C"
 ,
 
   "FIELD1": "ITEM ",
   "FIELD2": "RATE LIST",
   "FIELD3": "HSN Code"
 ,
 
   "FIELD1": "HORSES - PURE-BRED BREEDING ANIMALS ",
   "FIELD2": "0.12",
   "FIELD3": "1011010"
 ,
 
   "FIELD1": "ASSES - PURE-BRED BREEDING ANIMALS ",
   "FIELD2": "0",
   "FIELD3": "1011020"
 ]

我正在尝试在 jquery ui 自动完成中获取这些结果,但它不起作用

 $( function() 
  $('#tags').autocomplete(
    source: function (request, response) 
        $.getJSON("check.json?term=" + request.term, function (data) 
            response($.map(data.dealers, function (value, key) 
                return 
                    label: value,
                    value: key
                ;
            ));
        );
    ,
    minLength: 2,
    delay: 100
);
   );

【问题讨论】:

您是否尝试使用“标签”、“值”之类的标签和值更改 json 属性名称 你能帮我回答一下吗:) "check.json?term=" + request.term 上调用 GET 将产生 100% 的结果。除非您的 Web 服务器具有 .json 文件的服务器端处理功能,否则它不会知道如何处理 term 【参考方案1】:

由于您无法更改 JSON 文件,我建议:

source: function (request, response) 
  $.getJSON("check.json", function (data) 
    var results = [];
    console.log("Data:", data);
    $.each(data, function(k, v)
      console.log("Checking if", request.term, "is part of", v.FIELD1);
      if(v.FIELD1.indexOf(request.term) == 0)
        console.log("True");
        results.push(
          label: v.FIELD1,
          value: v.FIELD2,
          hsn: v.FIELD3,
          oData: v
        );
       else 
        console.log("False");
      
    );
    console.log("Sending results:", results);
    response(results);
  );

这将提取所有结果,因为它是 JSON 而不是服务器端脚本文件。然后,您将需要找出请求期限。这就是$.each() 有帮助的地方。您也可以使用$.ui.autocomplete.filter()。对于这种情况,它没有那么有用,因为它需要一个数组和术语来过滤。

更新

在我看到你的 Fiddle 之后,我将它分成了一个工作示例:

https://jsfiddle.net/Twisty/uejaafuk/

JavaScript

var myData = [
  "FIELD1": "A",
  "FIELD2": "B",
  "FIELD3": "C"
, 
  "FIELD1": "ITEM ",
  "FIELD2": "RATE LIST",
  "FIELD3": "HSN Code"
, 
  "FIELD1": "HORSES - PURE-BRED BREEDING ANIMALS ",
  "FIELD2": "0.12",
  "FIELD3": "1011010"
, 
  "FIELD1": "ASSES - PURE-BRED BREEDING ANIMALS ",
  "FIELD2": "0",
  "FIELD3": "1011020"
];

$(function() 
  $('#tags').autocomplete(
    source: function(request, response) 
      //$.getJSON("check.json", function(data) 
      $.ajax(
        type: "POST",
        dataType: "JSON",
        data: 
          json: JSON.stringify(myData)
        ,
        url: "/echo/json/",
        success: function(data) 
          var results = [];
          console.log("Data:", data);
          $.each(data, function(k, v) 
            console.log("Checking if", request.term, "is part of", v.FIELD1);
            if (v.FIELD1.toLowerCase().indexOf(request.term.toLowerCase()) == 0) 
              console.log("True");
              results.push(
                label: v.FIELD1,
                value: v.FIELD2,
                hsn: v.FIELD3,
                oData: v
              );
             else 
              console.log("False");
            
          );
          console.log("Sending results:", results);
          response(results);
        
      );
    ,
    minLength: 2,
    delay: 100
  );
);

【讨论】:

我正在创建一个小提琴等待 Uncaught SyntaxError: missing ) after argument list @TayyabGulsherVohra 已编辑 - 在 $.each() 末尾找到了缺失的 ) 我已经尝试过这段代码,但没有任何效果。这段代码没有显示任何响应,但它给出的状态是 200 好的,所以 200 很好,当您查看您的 Network 部分时,您是否在 AJAX 调用的响应中看到 JSON 数据?

以上是关于jQuery ui 使用 json 文件自动完成的主要内容,如果未能解决你的问题,请参考以下文章

无法将 Jquery-ui 自动完成链接到 JSON 文件

带有从 Rails 生成的 JSON 数据源的 jQuery UI 自动完成 - 不工作

使用 JSON 自动完成 Jquery UI

使用 JSON 的 jQuery UI 自动完成

使用来自 URL 的 JSON 的 jQuery UI 自动完成

使用带有外部 Json 的 jquery UI 自动完成