使用Ajax请求的Jquery自动完成搜索作为sourcedata

时间:2014-11-21 12:28:56

标签: javascript jquery ajax json jquery-ui-autocomplete

我想做什么:

我想使用jquery自动完成功能执行输入文本字段,该功能从跨域curl请求获取源数据。结果应该与此示例完全相同(CSS在这里不重要):http://abload.de/img/jquerydblf5.png(所以我实际上想要显示我从curl请求获得的其他信息)。获取源数据的URL是http://www.futhead.com/15/players/search/quick/?term=,最后我添加了当前在输入字段中输入的字母(例如" Ronaldo")。

目前我只尝试执行searchrequest而不显示所有信息,如上面的屏幕所示。我只想看看我实际上通过卷曲请求找回了哪些玩家名字。稍后我会尝试为下拉列表添加更多信息。也许你们也可以帮我这个(我认为它叫做自定义renderItem ??)。

这是我尝试过的:

<script>
 $( "#tags" ).autocomplete({
    source: function (request, response) {
        $.ajax({
            type: 'GET',
            url: 'playerscraper.php',
            dataType: "json",
            data: function () { 
                return $("#results").val() 
            },
            success: function (data) {
                // I have no idea what this response and map is good for
                response($.map(data, function (item) {
                    return {
                        label: item.label,
                        id: item.value,
                    };
                }));
            },
        });
    }
});
</script>

<div class="ui-widget">
  <label for="tags">Tags: </label>
  <input id="tags">
</div>

我的playerscraper.php正在执行curl请求并实际返回一个数组(使用echo测试):

$term = $_GET['term'];
$curlRequest = new CurlRequest(); 
$result = $curlRequest->get('http://www.futhead.com/15/players/search/quick/?term=' . $searchterm);
$players = array();

return json_encode($result);

我的问题:

我不知道如何以这种方式为自动完成功能执行源部分,我从输入字段中使用myterm从ajax请求中获得了正确的结果。当我在输入字段中输入内容时,没有任何反应(定义源的函数被调用 - 使用警报进行测试)。

首先尝试使用您的帮助解决问题(当前代码):

<script>
 $( "#tags" ).autocomplete({
    source: function (request, response) {
        $.ajax({
            type: 'GET',
            url: 'playerscraper.php',
            dataType: "json",
            data: function () {
                term: request.term
            },
            success: function (data) {
                // I have no idea what this response and map is good for
                response($.map(data, function(item) {
                    return {
                        label: item.full_name,
                        value: item.player_id
                    };
                }));
            },
        });
    },
    minLength: 3,
    delay: 500
});
</script>

2 个答案:

答案 0 :(得分:2)

JSON的格式与自动完成小部件所期望的格式不兼容。这是$.map发挥作用的地方。您可以使用此函数将JSON转换为所需的格式。首先返回{label: "display name", value: "some id"}对,如下所示:

response($.map(data, function(item) {
    return {
        label: item.full_name,
        value: item.player_id
    };
}));

注意:

  1. 您应该使用JSON发送内容类型标题:
  2. header("Content-Type: application/json");
    echo $result;
    
    1. 您应该使用request.term代替data参数的输入元素值,如下所示:
    2. data: { term: request.term }
      
      1. 您应该设置更高的delayminLength值以减少JSON请求的数量:
      2. delay: 500,
        minLength: 3,
        
        1. PHP脚本中有一些未定义的变量。固定。确保echo使用JSON而不是return。远程服务器发送JSON,因此不需要再次json编码。
        2. $term = $_GET['term'];
          $result = file_get_contents('http://www.futhead.com/15/players/search/quick/?term=' . $term);
          header("Content-Type: application/json");
          echo $result;
          
          1. 通过直接在浏览器中打开,始终检查PHP脚本是否存在问题。请始终查看浏览器JavaScript控制台以查找JavaScript错误和警告。

答案 1 :(得分:0)

jQuery代码中很少出现问题

  1. 您在服务器端代码中使用了$_GET['term']但未在ajax请求查询字符串中传递term  需要修复为

      

    数据:{term:request.term}

  2. 代码中的
  3. 额外的comman(,),它会在IE浏览器中产生问题

      

    响应($ .map(data,function(item){                       返回{                           label:item.label,                           id:item.value                       };                   }));