【问题标题】:how to take value from drop down list by ajax and send it to php?如何通过ajax从下拉列表中获取值并将其发送到php?
【发布时间】:2014-09-11 14:53:37
【问题描述】:

我有一些类别名称的下拉列表,我想通过使用 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>

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

旧代码:

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

【问题讨论】:

  • 您的具体问题是什么?
  • 你知道你的页面 AJAX 调用返回 WHOLE PAGE 加上 &lt;script&gt;alert('done');&lt;/script&gt; 吗?这实际上是 NOT json,由 dataType 指定。因此,我预计会出现解析错误,并且不会触发 .error 处理程序。如果调用成功,您不会渲染返回的内容......因此您不会看到警报。

标签: php jquery ajax yii


【解决方案1】:

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

【讨论】:

  • 请尝试将此类注释放在 cmets 中,这不是答案,尽管我赞成。
  • @MD.MD 这当然是一个有效的答案。请解释为什么不是。您尚未确定您的问题是什么,也没有提供任何故障排除信息或具体问题
  • 因为它不是一个完整的答案。
  • 它和问题一样完整。试图提供帮助,但由于您没有指定您的问题是什么,这部分代码将失败。
  • 我的问题是 PHP 代码没有收到 var category
【解决方案2】:

你知道你的页面 AJAX 调用返回 WHOLE PAGE 加上 &lt;script&gt;alert('done');&lt;/script&gt; 吗?正如dataType 选项所指定的那样,这真的是NOT json。因此,我希望会有一个 parse error 并且没有 .error 处理程序可以触发。如果调用是successful,您不会渲染返回的内容 ...因此您不会看到警报。

建议

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

【讨论】:

  • 您对问题的最新编辑使所有 cmets 和答案变得无关紧要。我希望您恢复原来的问题并作为新问题,但这只是我。或者,您可以编辑您的问题以显示它的各种版本。
【解决方案3】:

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

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

代码如下:

表单和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 代码显示和隐藏了一些元素。

【讨论】:

    猜你喜欢
    • 2019-06-30
    • 2016-04-27
    • 1970-01-01
    • 2013-03-26
    • 2016-08-22
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多