0

我正在尝试从 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的理解不是很大的话,应该是用querystring的方式来解析的,.serialize()demo所示中所示,但同样,我无法理解一旦序列化数据存储在控制器中的位置。

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

总结一下:

  • CakePHP 是否有一个默认变量存储来自 AJAX 请求的序列化表单的数据?
  • 如果不是,这些数据在常规 AJAX 请求中存储在哪里 || 如何将其重定向到我选择的变量?(对不起这个 AJAX 菜鸟后续)

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

PD:代码在 AJAX 之前的状态下经过测试并且运行良好(我通过发布请求处理所有内容)。为了支持秩序和可用性,我昨天才开始将它迁移到 AJAX。

4

2 回答 2

1

如果数据作为查询字符串发送,它可能会进入$this->params->query而不是$this->request->data. 如果那不是它所在的位置,请debug($this->request);尝试debug($this->params);

于 2014-05-29T23:56:55.673 回答
0

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

我终于模仿了这里发布的内容。

编码:

$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行,旧代码是否可以工作。根据这本书的简短描述,我猜它会,但仍不能完全确定上述描述的含义。

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

于 2014-05-30T15:41:34.273 回答