2014-12-31 45 views
1

我遇到了一个情况,那就是我已经创建了一个包含选项卡视图的用户界面,其中每个选项卡都包含使用CakePHP formhelper生成的表单。这些表单中的每一个都有自己的ID,而前开发人员通过单个提交将每个表单的ajax请求链接在一起。为ajax发布多个CakePHP formhelper表单

客户仍然希望所有的形式同时发布,所以我希望我可以序列多种形式这样的:

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

然而,在终点的地方张贴到我似乎得到一个空数组$这 - >请求 - >数据;而当我序列化一个表单时,它返回了我所有的表单值。

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

有没有办法让多个formhelper表单成为一个单一的ajax文章,然后处理将它们保存在另一端?

+0

你可以使用cakephp js helper http://book.cakephp.org/2.0/en/core-libraries/helpers/js.html –

+0

@AlimonKarim - 我在CakePHP 3上,它说这已被删除。有没有特定的内容,你发现可以在一个Ajax请求中容纳多个表单? – user2058037

+0

如何将'data:post_data'更改为'data:dataString'? – Annabel

回答

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控制器端访问它一样。