【问题标题】:Manage AJAX request data in a CakePHP controller在 CakePHP 控制器中管理 AJAX 请求数据
【发布时间】:2014-05-30 23:41:34
【问题描述】:

我正在尝试从 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 新手跟进)

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

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

【问题讨论】:

    标签: jquery ajax cakephp cakephp-2.4.7


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      感谢 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,我猜它会,但仍不能完全确定上述描述的含义。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-10
        • 1970-01-01
        • 2017-02-26
        • 2015-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多