jQuery JSON下拉不填充

时间:2010-08-31 07:47:39

标签: php jquery mysql json

我正在尝试使用jQuery,PHP和mySQL创建一个下拉列表,这是我到目前为止的代码,

HTML:

<select id="box"></select><br />
<input id="button" type="button" value="populate" />

的Javascript / jQuery的:

$(document).ready(function() {
    $("#button").click(function (){     
        $.getJSON("test_post.php", function(data){

            $.each(data, function(user) {
                $('#box').append(
                    $('<option></option>').html(user)
                );
            });
        });
    });
});

PHP:

mysql_connect('localhost', 'user', '1234');
mysql_select_db('json');
$test = mysql_query('SELECT user,pass FROM login WHERE user="john"');

while($row = mysql_fetch_array($test, true)) {
    $data .= json_encode($row);
};

echo $data;

我在数据库中有3个条目,当我运行'test_post.php'文件时,它会回显JSON,但当我尝试让它填充下拉时,没有任何反应!

知道为什么吗?

4 个答案:

答案 0 :(得分:3)

尝试从while循环中取出json_encode并在结束时对其进行编码。像这样:

while($row = mysql_fetch_array($test, true))
{
    $data[] = $row;
}

$data = json_encode($data);
echo $data;

[编辑]:OP评论后:

如果您只想在下拉菜单中输入用户名,请按以下步骤操作:

while($row = mysql_fetch_assoc($test))
{
    $data[$row['user']] = $row;
}

$data = json_encode($data);
echo $data;

答案 1 :(得分:2)

您的代码中存在多个问题。

首先:尝试使用未定义的变量$data,您应该在while循环$data = '';之前将其初始化为空字符串,否则可以发送带有JSON响应的PHP通知,具体取决于display_errorserror_reporting设置的值。

第二:,如@shamittomar所说,$data必须是一个数组,json_encode()必须只为整个数组调用一次。目前,您正在发送连接到单个字符串的几个 JSON对象,这是错误的。

JavaScript中user函数参数的

第三:值实际上是data数组的索引,而不是,但即使user是一个值,它也是一个JavaScript 对象,具有userpass属性,而不是字符串

结果代码应该是(仅更改部分):

<强> PHP

$data = array();
while ($row = mysql_fetch_array($test, true)) {
    $data[] = $row;
};

echo json_encode($data);

<强>的JavaScript

$.each(data, function(i, user) {
    $('#box').append(
        $('<option></option>').html(user.user)
    );
});

答案 2 :(得分:0)

您是否尝试过验证JSON? jQuery非常挑剔它的JSON:它需要正确验证,没有评论和正确的内容类型! 尝试在PHP中添加以下内容以查看它是否有帮助(我总是这样做)

header('Content-type: application/json');

答案 3 :(得分:0)

首先检查mysql连接代码是否正常?

mysql_connect('localhost', 'user', '1234');

更新了PHP代码,如下所示,

mysql_connect('localhost', 'user', '1234');
mysql_select_db('json');
$test = mysql_query('SELECT user,pass FROM login WHERE user="john"');

while($row = mysql_fetch_array($test, true)) {
    $data['pass '] = $row['pass'];
    $data['user'] = $row['user'];
 };

echo json_encode($data); die();

Javascript代码:

$("#button").click(function (){  
    $.getJSON('getDropdownData.php', '',function(data){
        $("#box").remove();
        $('<option />', {value: '', text: 'Select option'}).appendTo("#box");
        $.each(data,function(key, value){
             $('<option />', {value: key, text: value}).appendTo("#box");
        });
    });
});

然后你会得到一个dorpdown with pass as&#34; option value&#34;和用户作为&#34;选项文本&#34;。