0

我确实有一个使用 PHP、MySQL 和 JavaScript 的例程。有两个表:tbl_category 和 tbl_subcategory 就像这样:

tbl_category

  1. cat_id
  2. 猫名

tbl_subcategory

  1. scat_id
  2. cat_parent_id
  3. 猫名

他们里面有一些信息,比如

tbl_category:

  1. 裤子
  2. T 恤

tbl_子类别:

  1. 1 牛仔裤
  2. 1 重型
  3. 2 靴子
  4. 2 凉鞋
  5. 3 长袖
  6. 3 短袖
  7. 3 马球

我在文件头中放入了 javascript 库的链接:

<script type="text/javascript" src="jquery-1.8.2.min.js"></script>

当然,我以前从 jquery 网站下载(较新版本)。

我现在有脚本例程:

<script type="text/javascript">

  $(document).ready(function(){
     $("select[name=cat_id").change(function(){
        $("select[name=scat_id]").html('<option value="">Loading...</option>');
        $.post("ajax_subcategory.php",
              {cat_id:$(this).val()},
              function(valor){
                 $("select[name=scat_id]").html(valor);
              }
              )
     })
  })

现在我有了表单,其中选择字段类别预加载了表 tbl_category 中的数据:

<form name="form" method="post" action="" enctype="multipart/form-data">
<table width="100%" border="0" cellspacing="6" cellpadding="0">
<tr>
   <td align="right">Category:</td>
   <td><select name="cat_id" >
          <option value="0">Choose category</option>
    <?php
             $sql1 =mysql_query("SELECT * FROM tbl_category ORDER by cat_name")or die(mysql_error());
            while($row = mysql_fetch_array($sql1))
            {
               echo ("<option value=\"$row[cat_id]\"" . ($sql1 == $row["cat_name"] ? " selected" : "") . ">$row[cat_name]</option>");  
            }
          ?></select> 
   </td>
</tr>
<tr>
   <td align="right">Sub-category:</td>
   <td><select name="scat_id" selected="selected" >
       <option value="0">Waiting category...</option>
       </select> 
   </td>
 </tr>
 </table>
 <input type="submit" name="submit" value="Submit"/>
 </form>

然后是名为 ajax_subcategory 的 php 文件:

<?php

include "../connect_to_mysql.php";

$cat_id = $_POST['cat_id'];

$sql1 =mysql_query("SELECT * FROM tbl_subcategory WHERE cat_parent_id='$cat_id' ORDER by cat_name")or die(mysql_error());
while($row = mysql_fetch_array($sql1))
 {
    echo ("<option value=\"$row[scat_id]\"" . ($sql1 == $row["scat_name"] ? " selected" : "") . ">$row[scat_name]</option>");  
 }
 ?>

完毕!一切看起来完美而美丽。当我在第一个组合中选择项目时,我可以看到正在运行的 Javascript 和 Loading... 显示,但第二个 ComboBox 始终为空,无论我选择什么项目,它都显示为空并变小(宽度) .

这是一个很好的例行程序,我从另一个网站看到在网络上工作。

你们能帮我找到解决办法吗?

谢谢

4

2 回答 2

0

首先,您需要按照一步一步的故障排除来分析数据。这就是我会做的,在你的情况下:

  1. 在发布之前检查 cat_id:

    $("select[name=cat_id").change(function(){
         alert($(this).val());
    
  2. 按原样打印 mysql_query(ajax_subcategory 页面)中的字符串,并检查查询是否有效。直接在 MySQL 控制台或 phpMyAdmin 中尝试此查询并检查其输出。

  3. 分析 ajax 响应:使用 FireBug 或 Chrome 中的 Network 选项卡并检查 Ajax 响应。有时,您的 ajax_subcategory 页面会生成一些 PHP 警告或通知。

注意:我不明白你为什么要检查条件 $sql1 == $row["cat_name"]。$sql1 将是一个资源 ID,根据您的查询,$row['cat_name'] 是一个代表您的子类别名称的字符串。

顺便说一句,不推荐使用 mysql_* 函数,强烈建议不要使用它们。使用 mysqli_* 函数或 PDO。

于 2012-11-06T05:42:58.863 回答
0

$row["scat_name"] 改为 $row["cat_name"]

<?php

    include "../connect_to_mysql.php";

    $cat_id = $_POST['cat_id'];

    $sql1 =mysql_query("SELECT * FROM tbl_subcategory WHERE cat_parent_id='$cat_id' ORDER by cat_name")or die(mysql_error());
    while($row = mysql_fetch_array($sql1))
     {
        echo ("<option value=\"$row[scat_id]\"" . ($sql1 == $row["cat_name"] ? " selected" : "") . ">$row[cat_name]</option>");  
     }
     ?>
于 2012-11-06T06:25:44.373 回答