首页 > 解决方案 > Symfony,使用 ajax 将 html 表单提交给控制器

问题描述

我试图使用 AJAX 将 hmtl 表单的数据发送到控制器,但控制器没有收到错误显示的数据。

html表单:

<form id="evento" name="evento" method="post" >     
      <div class="form-group">
        <label for="evento-titulo" class="col-form-label">Título:</label>
        <input type="text" class="form-control" id="evento_titulo" name="evento_titulo">
      </div>          
      <div class="form-group">
        <label for="evento_descripcion" class="col-form-label">Descripción:</label>
        <textarea class="form-control" id="evento_descripcion" name="evento_descripcion"></textarea>
      </div>          
      <div class="form-group">
        <label for="evento_inicio" class="col-form-label">Inicio:</label>
        <input type="datetime-local" class="form-control" id="evento_inicio" name="evento_inicio">
      </div>          
      <div class="form-group">
        <label for="evento_fin" class="col-form-label">Fin:</label>
        <input type="datetime-local" class="form-control" id="evento_fin" name="evento_fin">
      </div>              
      <div class="form-group">
        <label for="evento_checkmail" class="col-form-label">
             <input type="checkbox"  id="chkmail" name="chkmail" style="vertical-align:middle;">            
             Añadir correo  &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp
             Color:
             <input type="color"  id="color" name="color" style="vertical-align:middle;">

        </label>
        <input type="email" class="form-control" id="evento_mail" name="evento_mail" disabled="disabled">
      </div>

      <div class="modal-footer">
        <button type="button" class="btn btn-outline-danger" data-dismiss="modal">Cerrar</button>
        <button type="submit" class="btn btn-outline-success" id="save_event" name="save_event">Confirmar</button>
    </div>
    </form>

通过ajax将表单数据传递给控制器​​:

$("#evento").submit(function(){     
    var data = $('#evento').serialize();        
    $.ajax({ 
        type: "POST",
        data: data,
        url: {{ render( controller('CalendarBundle:Calendar:addEvent')) }},
        success: function(data) 
        {
            console.log($data);
            alert('OK');
        }  
    });         });

控制器:

public function addEventAction() {

    $em = $this->getDoctrine()->getManager();
    //fetch the POST Data

    $request = $this->get('request_stack')->getCurrentRequest();
    $data = $request->request->all();


    $evento = new Evento();


    $evento->setBeginat(new \DateTime($data["evento_inicio"]));
    $evento->setEndat(new \DateTime($data["evento_fin"]));
    $evento->setTitle($data["evento_titulo"]);
    $evento->setMail($data["evento_mail"]);
    $evento->setDescription($data["evento_descripcion"]);
    $evento->setColor($data["color"]);

    $em->persist($evento);
    $em->flush();

    //return response
    $serializedEntity = $this->container->get('serializer')->serialize($evento, 'json');
    $response = new Response($serializedEntity);
    $response->headers->set('Content-Type', 'application/json');
    return $response;

}}

这是错误信息

在渲染模板期间引发了异常(“注意:未定义索引:evento_inicio”)。

标签: phphtmlmysqlajaxsymfony

解决方案


您的 Ajax 请求正在以application/json内容类型发送,但您的控制器正在等待application/x-www-form-urlencoded

尝试获取您json_decode()的.$request->getContent()$data


推荐阅读