使用jQuery UI自动完成小部件,其中包含JSON中的标签/值,但未显示结果

时间:2011-02-15 12:30:18

标签: jquery jquery-ui-autocomplete

我正在使用autcomplete小部件来填充表单中的客户端ID。它将显示标签,客户端名称,但需要传递id。我正在使用json和这个javascript代码来处理:

    $("input#clientid").autocomplete({
        source: function(request, response) {
            $("#ajax-loader").fadeIn('normal');

            $.ajax({
                url: BASE_URL + 'projects/ajax/get_clients',
                data: request,
                dataType: "json",
                type: "POST",
                success: function(data) {
                    response(data);
                }
            });

            $("#ajax-loader").fadeOut("normal");
        },
        minLength: 2
    });

在我的PHP控制器中,我用JSON直接打印一些结果,firebug给我这样的显示:

[{"label":"Client example","value":1},{"label":"Lorem Ipsum","value":2},{"label":"Microsoft","value":3}]

但是自动完成没有显示,控制台也没有错误。当我说没有显示我说是<input />之外没有“div”来选择一个值。对不起,不知道怎么表达好。

如果我从网站上尝试一个没有遥控器的基本示例,它会显示出来。我不知道自己做得不好。

提前谢谢!

1 个答案:

答案 0 :(得分:2)

 $.ajax({
                url: BASE_URL + 'projects/ajax/get_clients',
                data: request,
                dataType: "json",
                type: "POST", <--- //
                success: function(data) {
                    response(data);
                }
            });

您正在以错误的方式设置请求类型...这就是为什么它设置默认的ajax reaquest类型GET

<强>更新

您可以在输入字段使用autocomplete之前完成ajax请求吗?

之类的东西
$.ajax({
                url: BASE_URL + 'projects/ajax/get_clients',
                data: request,
                dataType: "json",
                type: "POST",
                success: function(data) {
                    xhrResponse(data);
                }
            });


function xhrResponse(data){

$("#clientid").autocomplete({
        source: function(data, response) {
            $("#ajax-loader").fadeIn('normal');

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


            $("#ajax-loader").fadeOut("normal");
        },
        minLength: 2
    });

}