jQuery Autocomplete不会显示PHP的JSON响应

时间:2011-06-28 11:13:12

标签: php jquery json autocomplete

我坚持使用jQuery Autocomplete的实现。我正在使用本教程:http://1300grams.com/2009/08/17/jquery-autocomplete-with-json-jsonp-support-and-overriding-the-default-search-parameter-q/

我的jQuery代码是这样的:

$("#quickSearchQuery").autocomplete("http://mydomain.net/json.php", {
    dataType: 'json',
    selectFirst: true,
    minChars: 2,
    max: 8,
    parse: function(data) {
        var rows = new Array();
        data = data.members;
        for(var i = 0; i < data.length; i++) {
            rows[i] = { id : data[i].id, name : data[i].name, location : data[i].location };
        }
        return rows;
    },
    formatItem: function(row, i, n) {
        return row.name + ' (' + row.location + ')';
    }
});

http://mydomain.net/json.php?q=Alb的调用会产生如下JSON响应:

{"query":"Alb","members":[{"id":"1","name":"Peter Albert","location":"New York"},{"id":"4","name":"Adalbert Smith","location":"Alabama"},{"id":"42","name":"Albert Einstein","location":"Vienna"}]}

我的问题是:它不起作用。自动完成未显示,未创建任何元素。 如果我运行教程中的代码,一切都很好,我得到自动完成的城市列表。但即使我只更改源URI并从data.geonames更改为data.members(依此类推),自动完成器也会停止工作。

我尝试了什么:

  • 我将dataType更改为 jsonp json ,但 jsonp 在JSON文件上创建了“无效标签”错误< / LI>
  • 我使用header("Content-Type: application/json");
  • 修改了PHP脚本的内容类型
  • 我尝试了所有其他Autocompleters,但没有改变
  • 我尝试了我在Stack Overflow的回复和网络教程中找到的所有修复
  • 我将geonames.org的JSON响应复制到一个文件中,将其上传到我的服务器并使用此硬编码响应作为查找源。仍然没有自动填充显示:(

也许你有个主意?

谢谢! 乔

1 个答案:

答案 0 :(得分:1)

使用自动填充功能,您必须使用属性ID和值才能使其正常工作。仅使用这些属性来呈现列表。

在你的php对象中,声明这样的东西(这个来自C#,但认为你理解它):

public class Product
    {
        public String id { get; set; } //must be used
        public String value { get; set; } //must be used
        public String marque { get; set; }
    }

并将json序列化字符串返回给客户端。

json是那样的

[{"id":"1","value":"UMTS","comment":"umts comment"},
{"id":"2","value":"RAN","comment":"ran comment"},
{"id":"3","value":"Swap","comment":"swap comment"}]

它将在您的JS中自动映射,自动完成功能现在应该可以使用。