JQuery:.change中的变量没有出现在.load中

时间:2010-10-12 14:19:27

标签: php jquery

我正在设置动态下拉菜单:select#category上的选项会通知select#subcat的内容。

这是select#category的html:

<select name="category" id="category">
    <option>Click Here to choose a category</option>
           <?php foreach ($categories as $key => $category) { ?>
    <option value="<?php echo $key ?>"><?php echo $category ?></option>
           <?php } ?>         
</select>

<select name="subcat" id="subcat">
    <option>&lt;-- First Choose a Category</option>                           
</select>

这是jQuery语句:

$(document).ready(function(){
    $("select#category").change(function(){
        $("select#subcat").load("subcats.php",{ id: $(this).val(), ajax: 'true'});
    });
});

这是subcats.php:

<?php
      //source of categories
      include("config.php") ;
      //initiate option list
      $options =  '<option value="">Choose a Sub-category</option>'."\n" ;
      if(!empty($_GET["id"])) {
      //iterate through the categories
      foreach ($categories as $key => $category) {
      if ($_GET["id"] == $key) {
      //select the data source
      $subcats = file('subcat/'.$key.'.dat', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) ;
      natsort($subcats);
      //create the rest of the option list
          foreach ($subcats as $subcat) {
          list ($subname,$subkey ) =explode ("\t", $subcat) ;
           $options .=  '<option value="'.$subkey.'">'.$subname.'</option>'."\n" ;
      }
      echo  $options ;   
          }
      }
      }  else {
      // if no variable given provide option list as error check
      echo  '<option value="">&lt;-- Choose a Category First</option>
      <option value="">Foo Bar</option>'."\n" ;   
          }
      ?>

我的理解是id: $(this).val()提供了来自select#category的选定选项以供在php文档中使用;我在这里吗?真的,如果我正确阅读文档,我甚至不需要, { id: $(this).val(), ajax: 'true'}位 ajax请求.load正在运行,因为错误检查菜单项会显示在select#subcats中。

然而,这就是所有出现的:变量似乎没有通过......

李在这里帮帮忙?提前谢谢!

2 个答案:

答案 0 :(得分:0)

在您的情况下this属于select#subcat。尝试使用此代码:

$(document).ready(function(){
   $("select#category").change(function(){
      $("select#subcat").load("subcats.php",{ id: $("select#category").val(), ajax: 'true'});
   })
})

答案 1 :(得分:0)

在.load之前使用console.log($(this).val())来调试提交的值

你确定数据是按每个get方法发送的吗?

  

示例:与上面相同,但会POST   附加参数   服务器和执行的回调   当服务器完成时   响应。

     

$("#feeds").load("feeds.php", {limit: 25}, function(){ alert("The last 25 entries in the feed have been loaded"); });

并在http://api.jquery.com/load/

的评论中找到
  

根据文件:“   如果是数据,则使用POST方法   作为对象提供;否则,GET   假设。“

您只需使用$_REQUEST['id']代替$_GET['id']$_POST['id']来覆盖两者(有关更多信息,请参阅php.net::$_REQUEST