【问题标题】:Serialize multiple CakePHP formhelper forms for ajax post为ajax post序列化多个CakePHP formhelper表单
【发布时间】:2014-12-31 01:43:12
【问题描述】:

我有一种情况,我收到了一个已经构建的用户界面,其中包含一个选项卡式视图,其中每个选项卡都包含一个使用 CakePHP formhelper 生成的表单。这些表单中的每一个都有自己的 ID,并且以前的开发人员在一次提交时对每个表单进行菊花链式 ajax 请求。

客户仍然希望所有表单同时发布,所以我希望我可以像这样序列化多个表单:

var post_data = $("#form-1, #form-2").serialize();
$.ajax({
    type: "POST",
    url: "/places/save_form",
    data: post_data,
    success: function(result) {},
    error: function(result) {}
});

但是,在它发布到的终点,我似乎从 $this->request->data; 得到了一个空数组;而当我序列化单个表单时,它返回了我所有的表单值。

我也没有在控制器中的 $_POST 中得到任何东西,所以它似乎在它到达那里之前被擦洗了。

有没有办法将多个 formhelper 表单放入单个 ajax 帖子中,然后在另一端处理保存它们?

【问题讨论】:

  • 你可以使用 cakephp js helper book.cakephp.org/2.0/en/core-libraries/helpers/js.html
  • @AlimonKarim - 我在 CakePHP 3 上,它说它已被删除。您是否发现其中有什么特定的东西可以在一个 ajax 请求中容纳多个表单?
  • data: post_data,改成data: dataString,怎么样?
  • 对不起,我的代码 sn-p 不准确。我仔细检查了我的代码,并且在两个地方都使用了相同的 var。我只是在两次不同的时间粘贴 sn-p 时搞砸了。我在这里更新了sn-p。

标签: php ajax cakephp


【解决方案1】:

我设法让它像这样工作:

var post_data = { };
post_data.FormOne = $("#form-1").serialize();
post_data.FormTwo = $("#form-2").serialize();

$.ajax({
    type: "POST",
    url: "/places/save_form",
    data: post_data,
    success: function(result) {
        $(loading_div).remove();
    },
    error: function(result) {
        $(loading_div).remove();
    }
});

在控制器端:

public function save_form() {
    $FormOne = $this->request->data['FormOne'];
    $FormOneValues = array();
    parse_str($FormOne, $FormOneValues);

    $FormTwo = $this->request->data['FormTwo'];
    $FormTwoValues = array();
    parse_str($FormTwo, $FormTwoValues);

    echo '<pre>'; 
    print_r($FormOneValues);
    print_r($FormTwoValues);
    die();
}

我的问题似乎与在 js 端正确格式化请求有关,与在 CakePHP 控制器端访问它有关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多