如何通过ajax从下拉列表中获取值并将其发送到php?

如何通过ajax从下拉列表中获取值并将其发送到php?,php,jquery,ajax,yii,Php,Jquery,Ajax,Yii,我有一些类别名称的下拉列表,我想使用ajax获取所选类别的名称,并将它们发送到ajax脚本所在的php页面,下面是我的新代码: 创建操作代码: public function actionCreate() { $model=new News; // Uncomment the following line if AJAX validation is needed // $this->performAjaxValidation($mo

我有一些类别名称的下拉列表,我想使用ajax获取所选类别的名称,并将它们发送到ajax脚本所在的php页面,下面是我的新代码

创建操作代码:

public function actionCreate()
    {
        $model=new News;

        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);

                if(isset($_POST['category']))
                       $category = $_POST['category'];
                   else
                       $category = NULL;

        if(isset($_POST['News']))
        {
            $model->attributes=$_POST['News'];
            if($model->save())
                $this->redirect(array('view','id'=>$model->id));
        }

        $this->render('create',array(
            'model'=>$model, 'category'=>$category
        ));
    }
表格编号:

<div class="row">
        <?php echo CHtml::label('Choose category to add from',''); ?>
                <?php $data = array('celebrities'=>'Celebrities', 'events'=>'Events', 'videos'=>'Videos', 'editorials'=>'Editorials'); ?>
        <?php echo CHtml::dropDownList('category', '', $data); ?>
    </div>
        <script type="text/javascript">

            $("#category").change(function(){
                var category = $(this).val();

            $.ajax({
                url:'/tonyward/index.php/news/create',
                data:{category:category},
                type:'POST',
                dataType:'html',
                success:function(data) {
                    console.log(data.category)
                },
                cache:false
            });
        });
        </script>

        <div class="row">
        <?php echo $form->labelEx($model,'idItem'); ?>
                <?php $data = array('celebrities'=>$category); ?>
        <?php echo CHtml::dropDownList('subcategory', '', $data); ?>
                <?php echo $form->error($model,'idItem'); ?>
    </div>

$(“#类别”)。更改(函数(){
var category=$(this.val();
$.ajax({
url:“/tonyward/index.php/news/create”,
数据:{category:category},
类型:'POST',
数据类型:'html',
成功:功能(数据){
console.log(data.category)
},
缓存:false
});
});
现在,第二个下拉列表的数据将如何更改

旧代码:


$(“#类别”)。更改(函数(){
$(“#类别”)。更改(函数(){
var category=$(this.val();
$.ajax({
url:window.location.href,
类型:'GET',
数据:{category:category},
数据类型:'json',
cache:false,
成功:功能(数据){
},
});
});

select
标记没有
href
因此
this.href
不会为您的AJAX生成有效的URL。

您知道页面AJAX调用会返回整个页面
警报(“完成”)
?它实际上是而不是
数据类型
选项指定的
json
。因此,我希望会出现
解析错误
,并且不会触发
。错误
处理程序。如果调用是
成功
完整的,则不会呈现返回的内容…因此你不会看到警报

建议

  • 更改PHP脚本,以便在设置
    类别
    时,仅返回
    if
    块中的代码
  • 不要使用
    alert('done');
    只需使用
    done
    ==>`echo“done”
  • success
    处理程序中,包含
    警报(数据)
  • 数据类型
    更改为
    文本
  • 包括一个
    错误处理程序
    以防万一
  • 当根据客户端代码提问时,包含相关部分的HTML(由浏览器呈现)通常会有所帮助而不是服务器端代码。我不知道PHP代码中的
    类别是什么:
    id
    name
    …许多其他人可能也有同样的问题,并且会避免这个问题

  • 我是如何解决我的问题的

  • 我创建了一个名为
    selectedCategory()
    的函数
  • selectedCategory()
    renderPartial
    下拉列表的html代码,该代码写在_categoryItems.php中
  • 我在更改第一个下拉类别
    (“#category”)
    时调用了一个ajax函数
  • ajax函数将被发布到
    selectedCategory()
    ,最后它将加载特定div中的html数据(如果成功)
  • 代码如下:

    表单和ajax函数代码:

    \u类别项目
    代码:

    
    

    注意:我用js代码显示和隐藏了一些元素。

    您的具体问题是什么?您知道页面AJAX调用返回整个页面加上
    警报('done')吗;
    ?这确实不是
    数据类型所指定的
    json
    。因此,我预计将出现解析错误,并且不会触发
    。错误
    处理程序。如果调用成功,您不会呈现返回的内容…因此您不会看到警报。请尝试在注释中添加此类注释,这不是一个答案,尽管我投了更高的票。@MD.MD这肯定是一个有效的答案。请解释为什么不是。您没有确定您的问题是什么,也没有提供任何关于问题的疑难解答信息或细节,因为这不是一个完整的答案。它与问题一样完整。尝试提供帮助,但因为您没有指定问题所在您的问题是,这部分代码将失败。我的问题是PHP代码未收到var
    类别
    。您对问题的最新编辑已使所有评论和答案变得无关紧要。我希望您将原始问题恢复为新问题,但这只是我的问题。或者,您可以编辑您的问题以这样一种方式显示它的各种版本。
    <div class="row">
                <?php echo CHtml::label('Choose category to add from',''); ?>
                        <?php $data = array('celebrities'=>'Celebrities', 'events'=>'Events', 'videos'=>'Videos', 'editorials'=>'Editorials'); ?>
                <?php echo CHtml::dropDownList('category', '', $data); ?>
            </div>
    
        <script type="text/javascript">
    
            $("#category").change(function(){
    
                $("#category").change(function(){
    
                    var category = $(this).val();
    
                    $.ajax({
                        url:window.location.href,
                        type:'GET',
                        data:{category:category},
                        dataType:'json',
                        cache:false,
                        success:function(data){
    
                        },
                    });
                });
        </script>
    
        <?php 
            if(isset($_GET['category'])){
    
                $category = $_GET['category'];
    
                echo "<script>alert('done');</script>";
            }
        ?>
    
    <div class="row">
            <?php echo CHtml::label('Choose category to add from',''); ?>
                    <?php $data = array('Celebrities'=>'Celebrities', 'Events'=>'Events', 'Videos'=>'Videos', 'Editorials'=>'Editorials'); ?>
            <?php echo CHtml::dropDownList('category', '', $data, array(
                        'empty'=>'select category'
                    )); ?>
        </div>
            <script type="text/javascript">
    
                $(function() {
    
                    document.getElementById('itemslabel').style.display='none';
                });
    
                $("#category").change(function(){
    
                    document.getElementById('itemslabel').style.display='block';
                    var category = $(this).val();
    
                    if(category === ''){
    
                        document.getElementById('items').style.display='none';
                    }
    
                    else{
    
                        $.ajax({
                            url:'/tonyward/index.php/news/selectedCategory',
                            data:{category:category},
                            async:true,
                            type:'POST',
                            dataType:'html',
                            success:function(data) {
    
                                document.getElementById('items').style.display='block';
                                $('#categoryItems').html(data);
                            },
                            cache:false
                        });
                    }
            });
            </script>
    
            <div class="row" id="items">
            <?php echo $form->labelEx($model,'idItem', array('id'=>'itemslabel')); ?>
                    <div id="categoryItems"></div>
                    <?php echo $form->error($model,'idItem'); ?>
        </div>
    
    public function actionSelectedCategory(){
    
                if(Yii::app()->request->isAjaxRequest){
    
                    $category = $_POST['category'];
    
                    $this->renderPartial('_categoryItems', array(
                       'category'=>$category 
                    ));
                }
            }
    
    <?php $data = CHtml::listData($category::model()->findAll(), 'id', 'thumbtitle'); ?>
    <?php echo CHtml::dropDownList('subcategory', '', $data); ?>