在jquery ui autocomplete方面需要帮助

时间:2011-08-26 20:26:40

标签: php jquery ajax codeigniter

我正在尝试使用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文档。

编辑:我已经改变了我的代码。而不是返回json_encode,我需要在php方面回应json_encode。我的控制台中仍然没有显示任何内容。

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

2 个答案:

答案 0 :(得分:1)

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

OLD STUFF:

我怀疑$ .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)应该打印'something'。我不确定你从哪里获取data.toSource。

答案 1 :(得分:0)

我会启动fiddler,看看它说的是什么回来了。您还可以直接在提供JSON结果的浏览器中访问服务器端页面。我认为自动填充会自动将?term添加到字符串中。 url.aspx?term=|valueofText1|

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