为什么当我使用Ajax更新实体时,控制器的请求对象不包含数据信息?

Why Request object from Controller doesn't contain data information when i used Ajax to update entity?

我尝试使用 Ajax 从表单更新 post 实体...

PostControler.php:

<?php

namespace BISSAP\ForumBundle\Controller;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use BISSAP\ForumBundle\Entity\Post;
use BISSAP\ForumBundle\Form\PostType;


class PostController extends Controller
{


    public function editAction($id)
    {
           ...
    }

    public function updateAction(Request $request)
    {
        $id = 14;
        if ($this->container->get('request')->isXmlHttpRequest()) {

        $em = $this->getDoctrine()->getManager();

        $entity = $em->getRepository('BISSAPForumBundle:Post')->find($id);

        if (!$entity) {
            throw $this->createNotFoundException('Unable to find Post entity.');
        }

        $editPostForm = $this->createForm(new PostType(true), $entity);
        $editPostForm->handleRequest($request);

                if ($editPostForm->isValid()) {
                $em->flush();
                return $this
                    ->container
                    ->get('templating')
                    ->renderResponse('BISSAPForumBundle:Post:update.html.twig', array('post' => $entity));        
                }

                $errorform = var_dump($editPostForm->getErrors(true));;
                return $this->render('BISSAPForumBundle:Post:test.html.twig', array('output' => $output));
        }


    }

}

当我在 $request 中探索 var_dump 时,没有任何形式信息(例如内容或名称形式...),也许是因为这个原因 isValid() return 错误。

部分 PostType:

$entity = $builder->getData();

            $builder
                    ->add('content', 'ckeditor', array(
                        'label' => 'Votre message',
                        'config_name' => 'edit_post',
                        'config' => array('language' => 'fr')))
                    ->add('Envoyer', 'submit', array(
                        'attr' => array(
                        'class' => 'btn right-flt',
                        'data-id' => $entity->getId())))
            ;

AJAX 点击:

$(function(){
    $(document).on('click', ".comment .content form button", function(e) {
    var $this = $(this);
    var route = $this.closest("form").attr("action");
    var type = $this.closest("form").attr("method");
    var id = $this.data('id');
    console.log(route);
    console.log(type);  
        $.ajax({type: type, dataType: 'html', url: route, success: function(response){
            console.log(response);


            $('#message-'+id).html(response);

        }, error: function(jqXHR, ajaxOptions, errorThrown) {
            console.log(jqXHR.status);
            console.log(jqXHR.responseText);
            console.log(errorThrown);
        }});
        return false;
    });
});

澄清时刻:

  1. 为什么在 ajax 请求中使用数据类型:'html'?
  2. 我没有看到你传递给 $.ajax
  3. 的对象 'data' 属性
  4. 我没有长时间使用 PHP 和 JS,但我记得我使用 jQuery 方法序列化表单,然后将其传递给 ajax 对象到数据部分,dataType我被设置为 json.

希望这对你有所帮助:)

向 ajax 调用添加数据可以解决此问题

$.ajax({
    type:"type",
    url: "url",
    data: $("form").serialize()
});