我认为更简单的方法是将回调函数作为源传递,这将更加灵活并且适合您想要完成的任务。根据 jQuery UI 文档:
回调有两个参数:
查看您的代码,它可能类似于:
$("#searchbox").autocomplete({
//define the callback function
source: function(request, response) {
$.ajax({
dataType: "json",
url: "./wp-admin/admin-ajax.php",
data: request,
success: function(data) {
//create array for response objects
var acTerms = [];
//process response and add it to the array
$.each(data,function(i,val){
acTerms.push(val.username); //whatever your username property is
});
//pass array to response callback
response(acTerms);
});
});
});
您的 PHP 脚本将使用作为数据发送的请求对象上的“term”属性,以检索适当的结果并回显生成的 JSON,并由成功回调处理。
How to use the jQuery UI Autocomplete Widget中有一个关于使用函数回调作为源的很好的教程。
更新:
我回过头来意识到处理 AJAX 请求的一种更简单的方法是将字符串传递给指向脚本 URL 的源回调。
jQuery UI 文档指出:
- 当使用字符串 [作为源类型] 时,自动完成插件期望该字符串指向将返回 JSON 数据的 URL 资源。它可以在同一台主机上,也可以在不同的主机上(必须提供 JSONP)。自动完成插件不过滤结果,而是添加了一个带有术语字段的查询字符串,服务器端脚本应该使用它来过滤结果。例如,如果源选项设置为“ http://example.com ”并且用户键入 foo,则会向http://example.com?term=foo发出 GET 请求。数据本身可以采用与上述本地数据相同的格式。
然后您的代码将更改为:
$("#searchbox").autocomplete({
//define the callback function
source: "./wp-admin/admin-ajax.php"
});
您必须在 PHP 脚本中处理通过 GET 请求 ($_GET["term"]) 传入的术语。由于您的脚本返回一个以 JSON 格式编码的字符串,假设您的 JSON 格式正确,您的自动完成功能应该正确填充。