我一直试图根据这个答案来解决我的问题:使用jQuery 从数据库填充选择框
我曾试图实现答案中所说的内容,但我在这里运气不佳。到目前为止,所有出现在下拉菜单中的都是从中开始的默认"石头"项目。
有人能抽出点时间帮我解决一下我的问题吗。我的代码基本上应该从MySQL数据库中读取,该数据库从1开始有150多个ID,并在加载时使用同一ID行中的相应名称来填充下拉菜单。
下拉菜单内部的示例:
- Stone
- 草地
- 钻石
相应的DB会是什么样子:
ID item_name
1 Stone
2 Grass
3 Diamond
我尝试这样做的代码是:
PHP(process_item_list.PHP):
$con = mysql_connect($DB_HOST,$DB_USER,$DB_PASSWORD);
$dbs = mysql_select_db($DB_NAME, $con);
$tableName = "itemlist";
$result = mysql_query("SELECT * FROM $tableName");
$data = array();
while ( $row = mysql_fetch_row($result) )
{
$data[] = $row;
}
echo json_encode( $data );
?>
jQuery/Javascript
<script type="text/javascript">
$(function(){
var items="";
$.getJSON("process_item_lists.php",function(data){
$.each(data,function(index,item)
{
items+="<option value='"+item.id+"'>"+item.name+"</option>";
});
$("#tradeItems").html(items);
});
});
</script>
HTML
<select id="tradeItems">
<option value="">Stone</option>
</select>
我也对不同的方法持开放态度,只要它在加载时仍然填充下拉菜单!
编辑:在wirey的帮助下,PHP问题得到了解决。以下是运行PHP文件的结果:http://fogest.net16.net/mctrade/php/process_item_list.php当我使用警报框运行实际页面时,它们都会返回未定义的值,而不是正确的值
http://fogest.net16.net/mctrade/php/process_item_list.php看起来不像你所期望的,它看起来像这样:
[ ["1","Stone","images'/stone.png"],
["2","Grass Block","images'/grass_block.png"],
/* snip a lot of rows */
]
但你所期待的是这样的东西:
[ { "id":"1", "name":"Stone", "image?":"images'/stone.png"},
{ "id":"2", "name":"Grass Block","image?":"images'/grass_block.png"},
/* and so on */
]
我认为您将希望使用mysql_fetch_assoc()
而不是mysql_fetch_row()
,这可能会为您提供适当的输出。
奖励:您可以通过在echo
:之前添加一行来为响应提供适当的内容类型
header("Content-type: application/json");
echo json_encode($data);
备注:当我检查http://fogest.net16.net/mctrade/php/process_item_list.php我在最后发现了这个:
<!-- Hosting24 Analytics Code -->
<script type="text/javascript" src="http://stats.hosting24.com/count.php"></script>
<!-- End Of Analytics Code -->
这不应该是响应的一部分,它可能会使JSON解析器崩溃。