如何刷新选择列表与另一个

时间:2014-02-24 18:41:05

标签: ajax list cakephp select

在选择一秒钟的选项后,我正在努力刷新列表。 我有这个清单

<select id="ArticleShopId">
<option>Some options</option>
<option>Some options 2</option>
<option>Some options 3</option>
</select>

我有个好意思

<select id="ArticleCategoryId">
<option></option>
<option></option>
<option></option>
<option></option>
</select>

当我选择第一个选项时,ajax应该加载表Shop并更新第二个选择 我创建了一个名为admin_refreshCategoriesAjax

的动作
function admin_refreshCategoriesAjax($id = null){
    $this->loadModel('Category');
    // Le list recupere la valeur des IDs et cherche un champs qui a la valeur "name"
    $categories = $this->Category->find('list',array('order'=>'name ASC','conditions'=>array('shop_id'=>$id)));
    //return "toto";
    return $categories;
    #return  json_encode($categories);

}

我希望创建一个ajax代码来完成它。然后我尝试着它

$('select#ArticleShopId').on('change',function(){
    //alert($(this).val());
    //alert("/articles/refreshCategoriesAjax/"+$(this).val());
    $.ajax({
      type: "GET",
      url: "<?php echo $this->Html->url(array('controller' => 'articles', 'action' => 'refreshCategoriesAjax', 'admin' => true)); ?>",
      data: "id="+$(this).val(),
      success: function(msg){
        console.log(msg);
      }

    })

})

但是msg没有返回带有$ categories值的数组。 如何正确调用我的操作admin_refreshCategoriesAjax并使用$ categories的值更新我的第二个选择?

非常感谢你的帮助,我花了半天时间:o(

注意: 如果我在我的网址中输入此内容

  

http://localhost:8888/web/admin/articles/refreshCategoriesAjax/1

它让我很好地回想起我正在寻找的阵列。如果我用2换1,它会返回我的其他值。然后这部分接缝工作很好

2 个答案:

答案 0 :(得分:0)

我相信你的问题是在你的函数admin_refreshCategoriesAjax中你返回数组而不是做一些实际上将它输出到网页的东西。您可以echo json_encode($categories);获取一些可以使用的输出,而无需为该操作明确创建视图。

答案 1 :(得分:0)

您可以在id中找到一个ID,而不是在参数中找到$this->request->data。要使您的ajax请求安全,请在视图文件中使用以下代码:

$('select#ArticleShopId').on('change',function(){
     //alert($(this).val());
     //alert("/articles/refreshCategoriesAjax/"+$(this).val());
     $.ajax({
          type: "POST",
          url: "<?php echo $this->Html->url(array('controller' => 'articles', 'action' => 'refreshCategoriesAjax', 'admin' => true)); ?>",
          data: {id:$(this).val()},
          success: function(msg){
               console.log(msg);
          }
     });
});

以下代码进入您的控制器:

function admin_refreshCategoriesAjax(){
   $categories = array();
   if($this->request->is('post'))
   {
     $id = $this->request->data['id'];
     $this->loadModel('Category');
     // Le list recupere la valeur des IDs et cherche un champs qui a la valeur "name"
     $categories = $this->Category->find('list',array('order'=>'name ASC','conditions'=>array('shop_id'=>$id)));
     //return "toto";
   }
     return $categories;
     #return  json_encode($categories);
}

现在要在下拉列表中填充数据,请从控制器返回json_encode($categories)。并在您的ajax成功方法中使用var result = $.parseJSON(msg);