1

执行ajax请求的JavaScript代码

$('#search-field').autocomplete({source: 'url/of/autocomplete'});

在我更改 JSON 结构之前,它运行良好。它曾经返回

["anything","something","super value"]

现在它(服务器)返回一个有点复杂的 JSON

[{"title":"some-title","link":"/searc?q=some-title"}, {"title":"some-title2","link":"/searc?q=some-title2"}]

嗯,现在不显示了。它正在工作,但值(标题)没有明显显示。

我应该怎么做才能解决它?

4

4 回答 4

1

我认为您使用的是 AJAX 返回的数据,因此源属性应该是一个函数,并且您必须在选择它时添加一个新属性。当您收到数据时,您需要将其存储在全局变量中,然后在另一个函数中获取其值:

 $('#search-field').autocomplete({source: function(){
       jQuery.post('url', data, function(dataReceived){globalVariable = dataReceived; }, 'json');
   },

   select: function(event, ui) { 
      var local = globalVariable[ui.item];
      // work with the local variable.
 }

});
于 2012-08-30T18:24:40.407 回答
0

它必须将“标题”重命名为“标签”,将“链接”重命名为“值”。而已!

于 2012-08-30T18:34:36.517 回答
0

由于我看不到您的代码,我们假设这[{"title":"some-title","link":"/searc?q=some-title"}, {"title":"some-title2","link":"/searc?q=some-title2"}]是您的数据源。话虽这么说,这就是我将如何去做......

$(document).ready(function(){

var dataSource= [{"title":"some-title","link":"/searc?q=some-title"}, {"title":"some-title2","link":"/searc?q=some-title2"}];

    $('#search-field').autocomplete({
        source: function(request, response) {
        var filterResults = $.map(dataSource, function(item) {
            if(item.title.toLowerCase().indexOf(request.term.toLowerCase()) != -1 || item.link.toLowerCase().indexOf(request.term.toLowerCase()) != -1){
             return item;
         }
        else{
            return null;
        }
    });
      response(filterResults);
     }
    }).data('autocomplete')._renderItem = function (ul, item)
{
    return $("<li></li>")
        .data("item.autocomplete", item)
        .append($("<a></a>").html("Title: " + item.title + ", Link: " + item.link))
        .appendTo(ul);
};
});

现场演示:http: //jsfiddle.net/hUE9M/131/

使用这种方法,您可以搜索“标题”和“链接”属性。我希望这有帮助!

于 2012-08-30T19:55:16.467 回答
-1

保留旧的 JSON 结构并首先尝试有效的方法

于 2012-08-30T18:17:55.307 回答