我坚持使用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");
也许你有个主意?
谢谢! 乔
答案 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中自动映射,自动完成功能现在应该可以使用。