在CakePHP控制器中管理AJAX请求数据

时间:2014-05-29 22:26:26

标签: jquery ajax cakephp cakephp-2.4.7

我正在尝试从CakePHP控制器访问AJAX请求的数据,但是当我在控制器中时,无法理解表单数据的位置。

在我的视图中,在表单标记之间,我有以下代码:

echo $this->Js->submit(
    'Proceed',
    array(
    'url' => array(
        'controller' => 'json',
        'action' => 'itemSelection'
    ),
    'dataType' => 'json',
    'id' => 'proceed',
    'success' => 'onSuccessFunct( data )'
));

这导致我得到以下代码:

$(document).ready(function (){
    $("#proceed").bind("click", function(event){
        $.ajax({
            data:$("#proceed").closest("form").serialize(),
            dataType: "json",
            success:function (data, textStatus) {
                onSuccessFunct( data )
            },
            type:"post",
            url:"\/koro\/json\/itemSelection"
        });
        return false;
    });
});

这部分似乎工作正常,请求是在点击时完成的,成功函数被调用,问题是我不理解如何处理控制器中表单的数据。

$this->request->data显示为空,我不知道表单数据的位置。如果我对JQuery没有太大的误解,那么它应该以查询字符串方式as shown in the .serialize() demo进行解析,但同样,我无法理解在控制器中存储序列化数据的位置。

控制器的代码只是表格行的循环,将表格数据与表格数据进行比较,然后将其存储在另一个变量中,然后作为JSON返回。在继续执行函数的代码之前调用if($this->request->is('ajax')),其中有上述循环,其中曾经有一个if测试表单数据以检查它的值是否与null和0不同。我不知道相信控制器代码确实是一个问题。

总结:

  • 是否有一个默认变量,其中CakePHP存储来自AJAX请求的序列化表单的数据?
  • 如果没有,这些数据存储在常规AJAX请求中的位置||如何将其重定向到我选择的变量? (抱歉这个AJAX noob后续行动)

毋庸置疑,任何评论/回答都是受欢迎的,提前谢谢

PD:代码经过测试,并且处于AJAX之前的状态时工作正常(我通过发布请求处理所有内容)。为了支持订单和可用性,我昨天开始将其迁移到AJAX。

2 个答案:

答案 0 :(得分:1)

如果数据作为查询字符串发送,则可能会转到$this->params->query而不是$this->request->data。如果不是这样,请尝试debug($this->request);debug($this->params);

答案 1 :(得分:0)

感谢Kai的友好建议。尝试这些调试不断返回空对象和数组,$this->request->data为空,所以$this->params->query和几乎所有其他可能的选项都是空的。这非常令人沮丧。

我终于正确地模仿发布了here的内容。

代码:

$data = $this->Js->get('#formName')->serializeForm(array('isForm' => true, 'inline' => true));
$this->Js->get('#formName')->event(
    'submit',
    $this->Js->request(
        array('action' => 'itemSelection', 'controller' => 'json'),
        array(
            'data' => $data,
            'async' => true,    
            'dataExpression'=>true,
            'success' => 'onSuccessFunct( data )',
            'method' => 'POST'
        )
    )
);

我认为发送数据存在一些问题,并将旧代码与现在正在运行的代码进行比较我不知道如果我刚刚添加了'dataExpression' => true行,旧代码就会工作。基于the Book's brief description,我猜测它会,但仍不完全肯定上述描述的含义。

如果有人愿意提供解释,我想进一步解释,但我会结束这个问题。