0

我一直在尝试根据这个答案解决我的问题: Populate select box from database using jQuery

我试图实现那里的答案中所说的内容,但我在这里没有任何运气。到目前为止,下拉菜单中出现的所有内容都是从其中开始的默认“Stone”项目。

谁能抽出一些时间帮我解决我的问题。我的代码本质上应该从具有超过 150 个 ID 的 MySQL 数据库中读取,顺序从 1 开始,并使用相同 ID 行中的相应名称来填充加载时的下拉菜单。

下拉菜单内部的示例:

  • 结石
  • 钻石

对应的数据库是什么样的:

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 当我使用应该给我 ID 和项目名称的警报框运行实际页面时它们都返回 undefined 而不是正确的值。

4

1 回答 1

1

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 解析器崩溃。

于 2012-07-25T22:05:18.403 回答