【问题标题】:Need help with jquery ui autocomplete在 jquery ui 自动完成方面需要帮助
【发布时间】:2011-08-26 20:26:40
【问题描述】:

我正在尝试让 jquery ui 自动完成功能与 codeigniter 项目一起使用。

到目前为止,我有一个输入字段<input type="text" id="text1"/>

然后在我的脚本中我有

source: function(request, response) {
            $.post('autocompleteHandler', {mechanic: request.term}, function(data) {
            console.log('data.phpResp = '+data.phpResp);
            console.log('in post?');

            console.log('data = '+data.toSource);

            var realArray = $.makeArray(data);  // this line was needed to use the $.map function

            response($.map(realArray, function(item) {

                console.log('in map');

                return {
                    label: item.info,
                    value: item.info
                }

            }));


            }, 'json');
        },

在我的 codeigniter 控制器中,我有这个功能

function autocompleteHandler() {

    $input = $this->input->post('mechanic');

    $this->load->model('login_model');

    $results = $this->login_model->search_mechanic_criteria($input);

    $mechs= array();
    foreach($results as $result) {

        $mechs['info'] = $result['mechanic_name'];  

    }
}

我没有让这个工作。有人知道我可以从哪里开始排除故障吗?我真的很难使用 jquery ui 文档。

编辑:我稍微更改了代码。我需要在 php 方面回显 json_encode,而不是返回 json_encode。不过,我的控制台中仍然没有任何显示。

2ND EDIT 现在我的问题是,如何为自动完成功能返回多个值?如果我有一个返回的查询,只有一行,它工作正常,但如果我返回多行,则不起作用。一定是我返回数据的方式有问题,但我想不通。

【问题讨论】:

  • 请检查view.jquery.com/trunk/plugins/autocomplete/demo,我相信您没有从 PHP 返回正确的格式。使用 firebug 查看返回的 ajax 内容。
  • 我没有使用那个插件。我正在使用 jquery ui 自动完成插件。
  • 你试过 fiddler 来看看服务器在生产什么吗?
  • 我不需要 fiddler,我可以在 firebug 中使用 net 控制台。我可以看到服务器正在返回我所期望的。
  • 对于第二个编辑问题,请参阅jsfiddle.net/XYMGT/1。这是一个返回对象数组而不仅仅是一个对象的问题,至少在客户端说话时是这样。服务器端正确使用“$mechs[] = $result['mechanic_name'];”而不是“$mechs['info'] = $result['mechanic_name'];”。

标签: php jquery ajax codeigniter


【解决方案1】:

在你提到 toSource() 之后,我一直在玩 jsfiddle。见http://jsfiddle.net/XYMGT/。我发现map函数返回的不是jQuery,而是新的数组。

旧东西:

我怀疑$.map函数返回的不是数组,而是jQuery。也许它会这样做:

            // also you could inspect the data if the server returns what you think it returns:
            console.log(data);

            // first map the array
            $.map(data, function(item) {

                console.log('in response?');


                return {
                    label: 'testing',
                    value: 'test'
                }
            })
            // ...then separately do the response part
            response(data);

让我们知道它是否有所作为。

编辑:

如果仍然使用这个 PHP 代码:

function autocompleteHandler() {
  echo json_encode(array('phpResp' => 'something'));
}

那么 console.log(data) 应该在 FireBug 的控制台选项卡中显示以下内容:

{'phpResp':'somehting'}

这意味着 console.log(data.phpResp) 应该打印“某事”。我不确定您从哪里获取 data.toSource。

【讨论】:

  • 好,第一个console.log语句呢,它打印了什么? undefined、null、[] 还是预期的数据?
  • 如果我将它从console.log(data); 更改为console.log(data.toSource);,它会打印undefined
  • console.log(data.phpResp) 按预期打印somethingtoSource是在js中查看对象数据的一种方式。
  • 我已经用新代码更新了我的问题,该代码在大多数情况下都有效。看看你能不能帮我解决我目前的问题。
  • 我从这个链接中找到了它。在我的 foreach 循环中,我只需要这一行 - array_push($mechs, array('info'=>$result['mechanic_name']));。感谢您的帮助。
【解决方案2】:

我会启动 fiddler 并查看它返回的内容。您还可以在提供 JSON 结果的浏览器中直接访问您的服务器端页面。我认为自动完成会自动将?term 添加到字符串中。 url.aspx?term=|valueofText1|

$("#text1").autocomplete({
    source: url,
    minLength: 2,
    select: function (event, ui) {
        sou = ui.item.label;
    }
});

【讨论】:

    猜你喜欢
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多