【问题标题】:cannot populate data in auto complete text field无法在自动完成文本字段中填充数据
【发布时间】:2013-07-31 10:20:52
【问题描述】:
              var data_names;
     jQuery.ajax({
     type: "POST",
     url: 'AutoCompleteHandler.php',
     data: {d_name: "d_name"},
     dataType: "html",
     success: function(data) {

      data_names=data;
        console.log(data);

     }

 });

$("#p_name").autocomplete({
    minLength: 2,
    source:data_names, 
    focus: function(event, ui) {
        $("#p_name").val(ui.item.label);
        return false;
    },
    select: function(event, ui) {


        return false;
    }
})
        .data("ui-autocomplete")._renderItem = function(ul, item) {
    return $("<li>")
            .append("<a>" + item.label + "/" + item.p_gender + "/" + item.p_age + "</a>")
            .appendTo(ul);
};

我尝试使用上面的代码用数据填充我的自动完成框。但是我得到以下错误。当我打印 json 时,我得到了预期的 json。但是当我尝试将它附加到自动完成框时。我得到 json 数组数据,如下所示错误。

        [{"0":"kasun","p_name":"kasun","1":"Male","p_gender":"Male","2":"02-01-   1988","p_age":"02-01-1988","3":"880020110v","p_nic":"880020110v"}]
    Uncaught TypeError: Property 'source' of object [object Object] is not a function 

【问题讨论】:

    标签: jquery autocomplete


    【解决方案1】:

    不完全确定,但我认为如果你添加它可能有助于解决问题。

    在此代码中将data_names=data; 更改为data_names = jQuery.parseJSON(data); 以将json 字符串转换为自动完成可以正确处理的正确json 对象。

    var data_names;
    jQuery.ajax(
         {
            type: "POST",
            url: 'AutoCompleteHandler.php',
            data: {d_name: "d_name"},
            dataType: "html",
            success: function(data) {
                  //data_names=data;
                  data_names = jQuery.parseJSON(data);
                  console.log(data);
            }
    
    });
    

    编辑:这可能是自动提交不喜欢您传递的数据的原因。

    来自自动提交文档:

    Array: An array can be used for local data. There are two supported formats:
    
        An array of strings: [ "Choice1", "Choice2" ]
        An array of objects with label and value properties: [ { label: "Choice1", value: "value1" }, ... ]
    

    重新水合您的数据后,它看起来像这样:

    Array
    (
       [0] => stdClass Object
        (
            [0] => kasun
            [p_name] => kasun
            [1] => Male
            [p_gender] => Male
            [2] => 02-01-   1988
            [p_age] => 02-01-1988
            [3] => 880020110v
            [p_nic] => 880020110v
        )
    )
    

    这两个选项都不一样

    所以我假设自动提交已经决定,因为它不像其他任何东西我会假设它是一个函数,但当然它不是一个函数,它只是一个格式不正确的数组,所以它会引发异常。

    正如您似乎选择了 [ { label: "Choice1", value: "value1" }, ... ] 方法,无论是否有意,您都需要更改创建的 PHP这个数组,以便它以正确的格式生成数组以供自动提交使用。 所以当它从 PHP 传回来时,它看起来像这样:

    {"p_name":"kasun","p_gender":"Male","p_age":"02-01-1988","p_nic":"880020110v"}
    

    【讨论】:

    • @Dilshi 好的,我查看了手册 api.jqueryui.com/autocomplete/#option-source 您的数据似乎与小部件的预期不匹配。错误消息基本上是说我不喜欢您在source 参数中传递给我的数据。因此,这绝对与您通过调用AutoCompleteHandler.php 来格式化数据有关
    • 我使用标准的 json 编码方法来传递数据。所以我认为我的代码没有错误。如果我错了请帮助我
    • @Dilshi 我已添加到答案中。
    • 但是当我在控制台中打印数据时,它会打印 {"p_name":"kasun","p_gender":"Male","p_age":"02-01-1988","p_nic" :"880020110v"}.that 意味着它得到了正确的格式
    猜你喜欢
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 2018-06-28
    • 2014-07-31
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 2016-07-02
    相关资源
    最近更新 更多