小编Ric*_*ich的帖子

带有CSRF的Symfony2表单通过JQuery AJAX传递

我正在开发一个注释框,它将通过JQuery AJAX调用保存注释.

JQuery的

这是JQuery代码(这无缝地工作):

$(".post-comment").click(function() {
    var $form = $(this).closest("form");

    if($form)
    {
        $.ajax({
            type: "POST",
            url: Routing.generate('discussion_create'),
            data: $form.serialize(),
            cache: false,
            success: function(html){
                alert("Success!");
                // Output something                  
            }
        });
    }
    else
    {
        alert("An error occured");
    }
    return false;   
});
Run Code Online (Sandbox Code Playgroud)

Symfony2控制器

然后,Symfony2控制器方法获取表单数据并对其进行处理.作为该过程的一部分,它会检查表单是否有效:

$entry = new Discussion();
$discussionForm = $this->createForm(new DiscussionType(), $entry);

if ($request->getMethod() == 'POST') {

    $discussionForm->bindRequest($request);

    if ($discussionForm->isValid()) {
Run Code Online (Sandbox Code Playgroud)

此检查未返回true.在else中,我提取了已经给出的错误消息并得到:

Array
(
    [0] => The CSRF token is invalid. Please try to resubmit the form
)
Run Code Online (Sandbox Code Playgroud)

CSRF令牌正在通过post传递,就像同步提交表单一样.

另一个可能的问题..独特的表格ID

我使用的表单是由表单类型类创建的.在任何给定的页面上都会有几个评论表格.由于symfony2使用类型类的getName()方法来填充表单ID属性,因此我修改了它,如下所示:

public …
Run Code Online (Sandbox Code Playgroud)

ajax jquery csrf symfony

15
推荐指数
1
解决办法
1万
查看次数

标签 统计

ajax ×1

csrf ×1

jquery ×1

symfony ×1