关于jquery:在CakePHP控制器中管理AJAX请求数据

Manage AJAX request data in a CakePHP controller

我正试图从CakePHP控制器访问AJAX请求的数据,但是一旦我进入控制器,就无法理解表单的数据在哪里。

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

1
2
3
4
5
6
7
8
9
10
11
echo $this->Js->submit(
    'Proceed',
    array(
    'url' => array(
        'controller' => 'json',
        'action' => 'itemSelection'
    ),
    'dataType' => 'json',
    'id' => 'proceed',
    'success' => 'onSuccessFunct( data )'
));

这将导致以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$(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,则应该以查询字符串的方式对其进行解析,如.serialize()演示中所示,但是同样,我仍然无法理解序列化数据一旦存储在哪里,就将其存储在何处。控制器。

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

总结:

  • CakePHP是否有一个默认变量在其中存储来自AJAX请求的序列化格式的数据?
  • 如果不是,则此数据在常规AJAX请求中存储在哪里?如何将其重定向到我选择的变量? (对不起,此AJAX noob后续活动)

不用多说,欢迎任何评论/答案,在此先感谢

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


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


感谢Kai的友好建议。尝试进行这些调试时,始终会返回空的对象和数组,$this->request->data为空,$this->params->query也为空,几乎所有其他可能的选项也是如此。非常令人沮丧。

我终于正确地模拟了这里发布的内容。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$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行,旧代码是否可以工作。基于本书的简短描述,我猜想是可以的,尽管仍不能完全确定上述描述的含义。

如果有人愿意提供一个,我想得到进一步的解释,但是我要解决的问题。