Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Symfony2中通过ajax提交表单_Javascript_Php_Jquery_Ajax_Symfony - Fatal编程技术网

Javascript 在Symfony2中通过ajax提交表单

Javascript 在Symfony2中通过ajax提交表单,javascript,php,jquery,ajax,symfony,Javascript,Php,Jquery,Ajax,Symfony,我首先需要通过ajax呈现表单,然后需要更新现有值。我已经获得了具有适当值的渲染表单,但当我单击通过ajax提交表单时,我无法阻止表单提交,我有以下脚本: $('#edit-comment').click(function (e) { e.preventDefault(); console.log(1); }); 但还是要工作!我做错了什么。我不知道我需要如何在编辑操作中处理提交的表单。以下是它的现有部分: /** * @Route("/edit/comment", na

我首先需要通过ajax呈现表单,然后需要更新现有值。我已经获得了具有适当值的渲染表单,但当我单击通过ajax提交表单时,我无法阻止表单提交,我有以下脚本:

 $('#edit-comment').click(function (e) {
    e.preventDefault();
    console.log(1);
});
但还是要工作!我做错了什么。我不知道我需要如何在编辑操作中处理提交的表单。以下是它的现有部分:

 /**
 * @Route("/edit/comment", name="chat_edit", options={"expose"=true})
 */
public function editAction(Request $request)
{
    $comment_id = json_decode($request->getContent(), true)['commentId'];
    $comment = $this->get('comment.repository')->find($comment_id);
    $form = $this->createForm(new CommentType(), $comment);

    return $this->render("ChatCommentBundle:Comment:form.html.twig",
        array('form' => $form->createView())
    );
}
链接到更新:

原始答案(如下)仍然适用,但鉴于表单实际上是使用AJAX加载的,因此无法在
$(document).ready
回调中绑定事件侦听器。您的最佳选择是使用事件委派。这是通过将事件侦听器附加到一个DOM元素来完成的,该元素从一开始就存在,但让该侦听器为以后可能添加的元素拾取事件。例如:body元素将始终存在,因此您可以在那里侦听表单提交,该表单是否存在并不重要:

$('body').on('submit', '#form-id', function(e)
{
    console.log('#form-id was submitted, do AJAX => submission stopped');
    return false;
    //or
    e.preventDefault();
    e.stopPropagation();
});
这项工作的原因和方式已经得到了很好的解释。归根结底,所有事件都会通过目标节点的所有父DOM元素,因此您可以在DOM中的任何位置附加侦听器,并在事件到达目标之前处理它们。
我想也能解释一两件事。它不使用jQ,但它包含jQ内部用于委托的代码的简化版本


您正在阻止单击事件对
$(“#编辑注释”)
的默认效果,但该事件仍会传播到表单中。您可能还需要添加
e.stopPropagation()
。或者干脆
返回false从回调(阻止默认值并停止传播)

但是,防止表单提交的更好方法是使用
submit
事件,并在此处停止提交:

$('#form-id').on('submit', function(e)
{
    console.log('Do ajax call here');
    return false;
    //or
    e.preventDefault();
    e.stopPropagation();
});

您还应该共享commentType类。为客户端问题发布服务器代码没有多大好处。您是否已将事件绑定包装到
文档中。准备好了吗?它是正确的选择器吗?运行代码时元素是否存在?页面中是否有多个相同ID?@charlietfl,其包装为ready,selectir right,yes元素exist..创建一个复制此ID的演示。就目前而言,我们不能做任何事情来繁殖it@KristofFeys,我用forn TYPE添加了gist文件的链接您的表单id是什么,它的选择器是什么?您在控制台中看到输出了吗?将呈现的视图添加到您的问题(或要点)中,因为此代码根本不准备复制粘贴。引导模式窗口中的表单,因此当文档准备就绪时没有表单,但当我单击编辑按钮时,表单返回ajax,因此我认为它将无法工作…@excluded\u once:在这种情况下,您最好使用事件委派,我将更新我的回答,授权帮助解决问题,非常感谢,我需要深入了解JS、DOM和jQuery:)