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

时间:2014-09-11 14:53:37

标签: php jquery ajax yii

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

创建行动代码:

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>

现在第二个下拉列表的数据应该如何更改?

旧代码:

<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>";
        }
    ?>

3 个答案:

答案 0 :(得分:1)

select代码没有href,因此this.href不会为您的AJAX生成有效的网址。

答案 1 :(得分:1)

您知道您的页面AJAX调用返回整个页面<script>alert('done');</script>吗?这是json选项指定的 NOT dataType。因此,我希望会有parse error并且没有.error处理程序可以触发。如果呼叫是success你不会渲染返回的内容 ...因此你不会看到警报。

<强>建议

  1. 更改您的PHP脚本,以便在设置category时仅返回if块中的代码
  2. 而不是<script>alert('done');</script>只使用done ==&gt; `echo“done”
  3. success处理程序中包含alert( data )
  4. dataType更改为text
  5. 包含error处理程序以防万一。
  6. 当根据客户端代码提出问题时,通常有助于包含相关部分的HTML(由浏览器呈现)而不是服务器端代码。我不知道PHP代码中的category是什么:idname ......还有许多其他人可能会遇到同样的问题而且会避免这个问题。

答案 2 :(得分:0)

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

  1. 我创建了一个名为selectedCategory()
  2. 的函数
  3. selectedCategory()renderPartial下拉列表的html代码,用_categoryItems.php编写。
  4. 我在更改第一个下拉类别('#category')时调用了ajax函数。
  5. ajax函数将发布到selectedCategory(),最后它将在特定div中加载html数据(成功时)。
  6. 这是代码:

    表单和ajax函数代码:

    <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>
    

    操作selectedCategory代码:

    public function actionSelectedCategory(){
    
                if(Yii::app()->request->isAjaxRequest){
    
                    $category = $_POST['category'];
    
                    $this->renderPartial('_categoryItems', array(
                       'category'=>$category 
                    ));
                }
            }
    

    _categoryItems代码:

    <?php $data = CHtml::listData($category::model()->findAll(), 'id', 'thumbtitle'); ?>
    <?php echo CHtml::dropDownList('subcategory', '', $data); ?>
    

    注意:我通过我的js代码显示并隐藏了一些元素。