【问题标题】:if(isset($_POST.... not being set with ajax requestif(isset($_POST.... 没有设置 ajax 请求
【发布时间】:2013-08-18 03:16:49
【问题描述】:

我有一个zii.widgets.jui.CJuiDialog 框通过 ajax 向我的控制器发送表单。但是,当我测试控制器是否存在帖子if(isset($_POST['Item'])) 时。它不存在,我真的不知道为什么。我正在调整这篇文章http://www.yiiframework.com/wiki/145/cjuidialog-for-create-new-model/ 以满足我自己的需要。

这是模型中的表格:

<div class="form">

<form id="email-item-form" action="/www.mywebsite.ca/item/1/my-first-item" method="post">   <div id="email-item-success" class="label label-success"></div>
<div id="email-item-failure" class="label label-important"></div>

<div class="row">
    <label for="Item_email_item">Email this item to:</label>        <input placeholder="Send to..." name="Item[email_item]" id="Item_email_item" type="text" />        <div class="errorMessage" id="Item_email_item_em_" style="display:none"></div>   </div><!-- row -->
<div class="row">
    <label for="Item_email_item_sender">Email sent from:</label>    
    <input placeholder="Sent from..." name="Item[email_item_sender]" id="Item_email_item_sender" type="text" />        <div class="errorMessage" id="Item_email_item_sender_em_" style="display:none"></div>    </div><!-- row -->

<br />
</form>

控制器

public function actionEmail($id)
{
        if(isset($_POST['Item']))
    {

              // Rest of code
            }
} 

数据正在通过CHtml::ajax 发送并声明'type'=&gt;'post'。该过程一直在将项目ID发送到控制器并将响应发送回模态框。自从我尝试确认$_POST['Item'] 的存在以设置$model-&gt;attributes=$_POST['Item']; 后,问题就开始了

任何帮助解决这个问题都非常感谢。

更新以显示 CHtml::ajax()

var url = '<?php echo Yii::app()->createUrl("item/email", array("id"=>$model->id)); ?>';

<?php echo CHtml::ajax(array(
        'url'=>'js:url',
        'data'=> "js:$(this).serialize()",
....// Rest of code

【问题讨论】:

    标签: jquery ajax yii


    【解决方案1】:

    我没有看到name="Item" 的任何输入或其他表单数据。但是,如果您更改 php 代码以查找表单的确切名称,它应该会找到它们:

    public function actionEmail($id)
    {
            if(isset($_POST['Item[email_item_sender]']))
        {
    
                  // Rest of code
                }
    } 
    

    编辑:

    如果您想查看所有发布数据以进行调试,可以使用来自PHP: Possible to automatically get all POSTed data?的代码

    foreach ($_POST as $key => $value)
    echo "Field ".htmlspecialchars($key)." is ".htmlspecialchars($value)."<br>";
    

    【讨论】:

    • 无论在 Yii 中,您都应该能够找到 $_POST['Item'] 的存在。我确实更新了检查,但什么也没有。
    • 运行 foreach 脚本得到了什么?
    • 没有返回任何内容。我的堆栈跟踪中的未定义变量。 $_POST 为空
    • 那么 PHP 文件没有收到任何数据,这是您的 javascript 的问题。
    • 认为我已经修复了它,为 serialize() 修正了 id - 感谢您的帮助。
    【解决方案2】:

    默认情况下,jQuery 通过 GET 发送 AJAX 请求。试试这个:

    <?php echo CHtml::ajax(array(
        'url'=>'js:url',
        'data'=> "js:$(this).serialize()",
        'type'=>'POST'
        ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-04
      相关资源
      最近更新 更多