【问题标题】:Problems with $_POST["var"] in Yii ControllerYii 控制器中 $_POST["var"] 的问题
【发布时间】:2015-02-05 12:34:11
【问题描述】:

我在控制器上遇到了 $_POST["var"] 的问题。它似乎是空的。如何接收在我的 textFiled 上输入的字符串?

查看

<?php Yii::app()->clientScript->registerCoreScript("jquery"); ?>
                <script type="text/javascript">
                $(document).ready(function(){
                        $("#hhmm").change(function(){
                        $.ajax({
                      url: "<?php echo CController::createUrl('reqTest01Loading'); ?>",
                                data: $(this).serialize(),
                                type: "post",
                                dataType: "json",
                                success: function(data) {
                                      if (data.status === 'failure') {
                                            $('#impatto').val('Error request failed.');
                                         } else {
                                                 $("#impatto").html(data.total);     
                                         } 

                                }
                        });
                        });

                });
                </script>

控制器

public function actionReqTest01Loading() {

    $result = array("total" => $_POST['hhmm'], "status"=>"OK");
            echo CJSON::encode($result);
}

控制器规则

array('allow',  // allow all users to perform 'index' and 'view' actions
            'actions'=>array('reqTest01Loading','index','view','admin'),
            'users'=>array('@'),
        ),

提前致谢

【问题讨论】:

  • 使用 CVarDumper::Dump($_POST,100,true);在您的控制器中查看所有通过 ajax 发送的数据。
  • 您正在尝试 $_POST['hhmm'] 这是错误的,因为 ajax 没有设置 html 元素的 id。你可以试试 $_POST['data']
  • print_r($_POST) 并检查它返回的内容
  • 我在使用CVarDumper::Dump($_POST,100,true);print_r($_POST) 时没有任何响应,它只是空白。顺便说一句,将 hhmm 更改为数据没有任何响应:{"total":null,"status":"OK"}
  • 试试var_dump(file_get_contents('php://input'));

标签: javascript php json post yii


【解决方案1】:

这是因为你没有告诉 ajax 调用发送参数。

试试:

    $.ajax({
    url: "<?php echo CController::createUrl('reqTest01Loading'); ?>",
       data: {data:$(this).serialize()},
       type: "post",
       dataType: "json",
       success: function(data) {
           if (data.status === 'failure') {
              $('#impatto').val('Error request failed.');
           } else {
              $("#impatto").html(data.total);     
           } 

        }
   });

它的控制器:

public function actionReqTest01Loading() {
    // var_dump(Yii::app()->request->getPost('data'));
    $result = array("total" => Yii::app()->request->getPost('data'), "status"=>"OK");
    echo CJSON::encode($result);
}

【讨论】:

  • 嗨 TNC,我像你说的那样更新了代码,甚至 Controller 看起来像:public function actionReqTest01Loading() { var_dump(Yii::app()-&gt;request-&gt;getPost('data')); $result = array("total" =&gt; 60 + $_POST['hhmm'], "status"=&gt;"OK"); echo CJSON::encode($result); } var_dump(Yii::app()-&gt;request-&gt;getPost('data')); 禁止 ajax 调用在评论那行后我添加了 60 +​​ ** 所以在视图中让我只看到 60 但不求和 **hhmm 就像没有 $_POST["hhmm"] 再次感谢
  • 您可以在Yii::app()-&gt;request-&gt;getPost('data')中获取$(this).serialize();检查$(this).serialize()上的值
  • $(this).serialize() 中的值为空。这怎么可能???也许我会尝试使用自动完成实现不同的解决方案,我不明白为什么这个值为空。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-05
  • 1970-01-01
  • 2014-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多