Php jQuery JSON下拉列表未填充

Php jQuery JSON下拉列表未填充,php,jquery,mysql,json,Php,Jquery,Mysql,Json,我正在尝试使用jQuery、PHP和mySQL创建一个下拉列表,这是我迄今为止的代码 HTML: <select id="box"></select><br /> <input id="button" type="button" value="populate" /> 我在数据库中有3个条目,当我运行'test_post.php'文件时,它会回显JSON,但是当我尝试让它填充下拉列表时,什么都没有发生 知道为什么吗?尝试将json\u encod

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

HTML:

<select id="box"></select><br />
<input id="button" type="button" value="populate" />
我在数据库中有3个条目,当我运行'test_post.php'文件时,它会回显JSON,但是当我尝试让它填充下拉列表时,什么都没有发生


知道为什么吗?

尝试将
json\u encode
从while循环中取出,并在最后对其进行编码。像这样:

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

$data = json_encode($data);
echo $data;
[编辑]:在评论之后:

如果您只想在下拉列表中输入用户名,请执行以下操作:

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

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

尝试将
json\u encode
从while循环中取出,并在最后对其进行编码。像这样:

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

$data = json_encode($data);
echo $data;
[编辑]:在评论之后:

如果您只想在下拉列表中输入用户名,请执行以下操作:

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

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

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


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

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


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

您的代码中有几个问题

首先:尝试使用未定义变量
$data
,您应该在
之前将其初始化为空字符串,而
循环:
$data=''
,否则会发送带有JSON响应的PHP通知,具体取决于
display\u errors
error\u reporting
设置的值

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

第三:JavaScript中的
用户
函数参数的值实际上是
数据
数组的索引,而不是,但即使
用户
是一个值,它也是一个JavaScript对象,具有
用户
传递
属性,不是字符串

产生的代码应为(仅更改部分):

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)
    );
});
$。每个(数据、函数(i、用户){
$(“#框”)。追加(
$('').html(user.user)
);
});

您的代码中有几个问题

首先:尝试使用未定义变量
$data
,您应该在
之前将其初始化为空字符串,而
循环:
$data=''
,否则会发送带有JSON响应的PHP通知,具体取决于
display\u errors
error\u reporting
设置的值

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

第三:JavaScript中的
用户
函数参数的值实际上是
数据
数组的索引,而不是,但即使
用户
是一个值,它也是一个JavaScript对象,具有
用户
传递
属性,不是字符串

产生的代码应为(仅更改部分):

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)
    );
});
$。每个(数据、函数(i、用户){
$(“#框”)。追加(
$('').html(user.user)
);
});

首先检查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");
        });
    });
});
$(“#按钮”)。单击(函数(){
$.getJSON('getDropdownData.php','',函数(数据){
$(“#框”).remove();
$(“”,{value:“”,文本:'Select option'});
$。每个(数据、函数(键、值){
$('',{value:key,text:value}).appendTo(“#框”);
});
});
});

然后您将得到一个dorpdown,pass作为“选项值”,user作为“选项文本”。

首先检查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");
        });
    });
});
$(“#按钮”)。单击(函数(){
$.getJSON('getDropdownData.php','',函数(数据){
$(“#框”).remove();
$(“”,{value:“”,文本:'Select option'});
$。每个(数据、函数(键、值){
$('',{value:key,text:value}).appendTo(“#框”);
});
});
});

然后您将得到一个dorpdown,pass作为“选项值”,user作为“选项文本”。

您是否使用Firebug或类似工具查看了服务器AJAX响应,以确保您得到了预期的结果?是的,它似乎正在按预期返回所有内容。您是否使用Firebug或类似工具查看服务器AJAX响应,以确保您得到了预期的结果?是的,我看到了,它似乎正在按预期返回所有内容。下拉列表正在填充ow,但始终为0,1,2,我假设这是因为它得到了数组索引值?下拉列表正在填充ow,但在整个过程中,我假设这是因为它得到了数组索引值?Thanx指出了我的错误,我真的很感激,这样我可以从中学习!而且,该代码工作得非常好!谢谢你指出我的错误,我真的很感激,这样我可以从中吸取教训!而且,该代码工作得非常好!