jQuery JSON下拉不填充

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

HTML:


使用Javascript / jQuery的:

 $(document).ready(function() { $("#button").click(function (){ $.getJSON("test_post.php", function(data){ $.each(data, function(user) { $('#box').append( $('').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,但当我尝试让它填充下拉时,没有任何反应!

知道为什么吗?

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

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

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

第三: JavaScript中user函数参数的值实际上是data数组的索引 ,而不是 ,但即使user是值,它也是具有userpass属性的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( $('').html(user.user) ); }); 

尝试从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; 

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

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

首先检查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(); $('', {value: '', text: 'Select option'}).appendTo("#box"); $.each(data,function(key, value){ $('', {value: key, text: value}).appendTo("#box"); }); }); }); 

然后你会得到一个dorpdown,传递为“选项值”,用户为“选项文本”。