0

当我在自动完成器之外使用时,我正在尝试使用自动完成,ajax 调用可以完美地工作。但以下代码不起作用。如何正确设置数据源?

$("#searchbox").autocomplete({ source: [{

        var search_val = $("#searchbox").val();
    $.ajax( {
        type : "POST",
        url : "./wp-admin/admin-ajax.php",
        data : {
            action : 'wpay_search',
            user_name : search_val
        },
        success : function(data) {
        //$('#search_result').html(data);
        return data;

        }
    });

}] });
4

1 回答 1

0

我认为更简单的方法是将回调函数作为源传递,这将更加灵活并且适合您想要完成的任务。根据 jQuery UI 文档:

回调有两个参数:

  • 一个请求对象,具有单个 term 属性,它引用文本输入中当前的值。例如,如果用户在城市字段中输入“new yo”,则自动完成项将等于“new yo”。

  • 一个响应回调,它需要一个参数:向用户建议的数据。此数据应根据提供的术语进行过滤,并且可以采用上述任何简单本地数据的格式。在请求期间提供自定义源回调以处理错误时,这一点很重要。即使遇到错误,您也必须始终调用响应回调。这确保了小部件始终具有正确的状态。

查看您的代码,它可能类似于:

$("#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 格式正确,您的自动完成功能应该正确填充。

于 2013-07-17T18:08:29.080 回答