0

我已经用谷歌搜索并查看了一段时间,但似乎无法弄清楚这一点。我试图满足的唯一要求是返回一个格式正确的 javascript 数组,其中包含 sql 语句的结果。

IE

给定一个查询:

SELECT NUMBERS FROM TABLE 

和结果:

NUMBERS
1
2
3

我想最终得到一个像这样的数组

["1","2","3"]

请帮助我了解我哪里出错了

这是我的php代码

<?php

$mysqli = new mysqli("local.host.com", "user", "pass", "db");

$sql = "SELECT DISTINCT NAME FROM table";

$result = $mysqli->query($sql);

while($row = $result->fetch_array())
{
    $rows[] = $row['NAME'];
}

echo(json_encode($rows));


$result->close();

/* close connection */
$mysqli->close();
?>

这是我的javascript:

    function GetCards()
{
    var cardarray = new Array();

    //alert('test');
    $.getJSON('getcardlist.php', function(data)
    {
        for(var i=0;i<data.length;i++)
        {
            cardarray.push(data[i]);
        }

        //return cardarray;

    });

    return cardarray;
}

编辑:

更多信息,我正在尝试为 jquery ui 设置一个自动完成列表,这是我为自动完成小部件设置的。

var list = GetCards();


$( "#name" ).autocomplete({
source: list,
minLength: 2

这是我从 chrome 控制台得到的错误

Uncaught TypeError: Cannot read property 'label' of null 
4

2 回答 2

1

GetCards正在返回一个空数组 - 这是您传递给 Autocomplete 小部件的内容 - 并导致小部件抛出TypeError异常。要传递填充的数组,请将实例化 Autocomplete 的代码移动到您的getJSON成功回调中(我不确定您是否需要循环data——除非您需要以某种方式实际转换其内容):

$.getJSON( 'getcardlist.php', function( data ) {
    $( "#name" ).autocomplete( {
        source: data,
        minLength: 2
    } );
} );

或者,考虑使用 Autocomplete 的简写直接从数据馈送加载(请参阅作为字符串传递source)。但是,这种方法可能需要在服务器端进行一些额外的工作,以便在用户键入时过滤列表——如果您想要这种行为。

于 2014-01-22T22:26:43.887 回答
0

你必须用来$.each获取数据

$.getJSON('getcardlist.php', function(data)
{
    $.each(data, function(key, val) {
       cardarray.push(val);
    });
    //return cardarray;
});
于 2013-03-16T04:26:09.423 回答