2016-03-08 82 views
0

我意识到这个问题之前已经被问过,但是从其他主题来看,我仍然无法找到解决我的问题的方法。无法将Jquery-ui自动完成连接到JSON文件

这里是相关的JS代码+ plunk的问题;

$('#test').autocomplete({ 
      source: function(request, response) { 
       $.ajax({ 
        url: "brands.json", 
        dataType: 'json', 
        data: request, 
        success: function(data) { 
         response($.map(data, function(item) { 
          return (item.brands) 
         })); 
        } 
       }); 
      }, 

普拉克:

https://plnkr.co/edit/qEZnuszj7JkNy1NrGyCd?p=preview

正如你所看到的,我无法找回任何在以.json文件规定的数据。

任何帮助将非常感激,

感谢

+0

为什么不仅仅是'return data.brands;'in response()? – Twisty

+0

你的'$(document).ready();'在第53行上的结尾是错误的。第52行应该是:'},100);'和第53行应该是:'});'。 – Twisty

+0

我在您的HTML中看不到具有'test'作为ID的元素。 – Twisty

回答

0

随着我提出的其他意见,我作出的jsfiddle工作示例:https://jsfiddle.net/Twisty/xp43u291/

HTML

<input name="myList" id="test"> 
<span id="#message"></span> 

JavaScript

$(document).ready(function() { 
    setTimeout(function() { 
    $('#test').autocomplete({ 
     source: function(request, response) { 
     $.ajax({ 
      url: "brands.json", 
      dataType: "JSON", 
      type: "GET", 
      success: function(resp) { 
      console.log("Find '", request.term, "' in ", resp.brands); 
      var results = []; 
      $.each(resp.brands, function(k, v) { 
       if (v.indexOf(request.term) == 0) { 
       results.push(v); 
       } 
      }); 
      response(results); 
      } 
     }); 
     }, 
     autoFocus: true, 
     minLength: 3, 
     response: function(event, ui) { 
     if (!ui.content.length) { 
      var noResult = { 
      value: "", 
      label: "No results found" 
      }; 
      ui.content.push(noResult); 
     } else { 
      $("#message").empty(); 
     } 
     } 
    }); 

    var render = $('#test').autocomplete('instance')._renderMenu; 
    $('#test').autocomplete('instance')._renderMenu = function(ul, items) { 
     items.push({ 
     label: 'OTHER BRAND', 
     value: 'OTHER BRAND', 
     last: true 
     }); 
     render.call(this, ul, items); 
    }; 
    }, 100); 
}); 

首先,你不希望使用$(document).ready();$(function(){});。使用一个或另一个。

其次,由于您正在调用JSON文件而不是脚本,因此没有任何内容传递给文件本身。所以我们删除data选项。

第三,在success上,我们期待将JSON数据作为对象。 IT将回来所有的数据,我们想要将它与下面的结果配对,只是匹配我们的request.term或输入的字符串。你可以用很多方式做到这一点,我使用.indexOf()进行了一个简单的循环。如果您希望它在整个短语中搜索而不仅仅是开头,您可以将其从==0更改为>=0

我希望能帮助你解决这个问题。如果没有,评论或更新您的文章。

+0

分叉你的掠夺者:https://plnkr.co/edit/SBr6wbXF33q3nVcek3Px?p=preview – Twisty

+0

嗨,感谢您的帮助,迄今为止 - 您的代码看起来比我的更干净!当我把'dom'或者包含在你的plnkr上的JSON文件中的东西放进去时,它仍然不显示正确的结果呢?它只是继续返回未找到结果/其他品牌列表选项。 – alexc

+0

然后你需要大写的搜索。 '.indexOf()'区分大小写。如果您搜索“DOM”,它会立刻起来。所以要么更新你的数据,要么使用'request.term.toUpperCase();'我喜欢漂亮的代码,如果你使用Python,你必须正确格式化。所以我只是到处去做。加上'整洁'功能帮助很大;) – Twisty