0

希望能找到答案。

我用 PHP 构建了一个网络应用程序,其中有一个记录列表和一些搜索字段。搜索字段之一是“客户编号”。客户编号保存在本地数据库 (MySQL) 中。如果我搜索客户编号,它会为我提供数据库的相应结果行 => 逻辑。

现在我想用 jQuery UI Autocomplete 为这个搜索字段构建一个扩展。

我想做的事:

我希望用户能够在搜索字段“customernumber”中搜索 customerNAME,并且自动完成会将正确的 customernumber 输入值中。

客户名称也与客户编号一起保存在外部 ODBC 数据库中。

我已经做了什么:

我试图从外部 ODBC 数据库中获取所有名称和数字,并得到如下列表:

customername: somename1 
customernumber: number1

customername: somename2
customernumber: number2

customername: somename3 
customernumber: number3

... and so on

如果我也使用 ajax 调用这个列表来自动完成,它根本不起作用。

有人可以帮帮我吗!?经过几个小时的搜索,我在互联网上或任何接近它的东西上都找不到答案。

我会很高兴的!谢谢!

我到目前为止得到的示例:

jQuery脚本:

<script
    $(function() {
        function log( message ) {
            $( "<div/>" ).text( message ).prependTo( "#log" );
            $( "#log" ).scrollTop( 0 );
        }

        $( "#customer" ).autocomplete({
            source: function( request, response ) {
                $.ajax({
                    url: "customers.php",
                    dataType: "json",
                    success: function( data ) {
                        response( function( item ) {
                            return {
                                label: item.customername,
                                value: item.customernumber
                            }
                        });
                    }
                });
            },
            minLength: 3,
            select: function( event, ui ) {
                log( ui.item ?
                    "Selected: " + ui.item.label :
                    "Nothing selected, input was " + this.value);
            }
        });
    });
</script>

输入 HTML:

<div class="ui-widget">
    <label for="customer">Search</label>
    <input id="customer" />
</div>

customer.php 中的 SQL 查询

$connection = odbc_connect('host', 'username', 'password') 
              or die('Connection failed!');

$sql = "SELECT 'customername', 'customernumber' FROM 'database.table'";

$results = odbc_exec($connection, $sql);

while($myRow = odbc_fetch_array($results)){
    $rows[] = $myRow;
};

foreach($rows as $row) {
    foreach($row as $key => $value) {
        echo $key . ': '. $value . '<br/>';
    }
};

要清楚

我在搜索框中输入 customerNAME,我想检索 customerNUMBER 作为值。

4

1 回答 1

1

您必须以正确的格式传回数据。

 while($r = odbc_fetch_array($results))
    $rows[] = array("label" => $r[0], "value" => $r[1]);    
 echo json_encode($rows);

 $("#search").autocomplete({  
        //define callback to format results  
        source: function(request, response){  
            //pass request to server  
            $.getJSON("query.php?term=" + request.term, function(data) {  
               response(data);
            });  
        });  
    });

有关更多选项,请参阅 jQuery UI文档

编辑 当前解决方案的问题

  • odbc_fetch_array 可能会在某些 RDBS 上返回没有列名的值(使用 print_r 进行调试)

    姓名号码 Bob 123

变成

Array
    (
        [0] => "Bob"
        [1] => 123
    )
  • JSON 输出甚至无效(使用 firebug 调试),我们示例的当前输出为:

    0:“鲍勃”1:123

于 2012-10-05T09:27:44.787 回答