2015-09-28 95 views
2

我通过AJAX(jQuery)发送了一个Symfony表单。 然而,即使数据被明确地发送,Symfony称该形式为“未提交”(实际上没有错误,但是一些调试显示isSubmitted返回false)。使用AJAX调用发送数据后,Symfony表单不会被提交?

这是在我的控制器代码

public function emailrequestFormAction(Request $request) 
{ 
    $result = new Result(); 
    $view = new View\EmailRequestView(); 
    $form = $this->createForm(new Type\formType(), $emailrequestview, array(
     'action' => $this->generateUrl('ajax_form_emailrequest'), 
     'method' => 'POST' 
    )); 

    return $this->render('AppBundle:Account/Form:formemailrequest.html.twig', array('form' => $form->createView())); 
} 

这是我formType

class formType extends AbstractType { 
public function getName() 
{ 
    return 'formType'; 
} 

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('Name', 'text') 
     ->add('Email', 'email') 
     ->add('SendRequest', 'submit', array('label' => 'Invite me')) 
     ->getForm(); 
} 

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'Bundle\AppBundle\Form\View\EmailRequestView', 
     'csrf_protection' => false, 
    )); 
}} 

的代码,这是我的EmailRequestView.php

class EmailRequestSignUpView { 
/** 
* @Assert\NotBlank(message = "Name should not be blank") 
*/ 
protected $Name; 

/** 
* @Assert\NotBlank(message = "Email should not be blank") 
*/ 
protected $Email; 

/** 
* @return mixed 
*/ 
public function getName(){ return $this->Name; } 

/** 
* @param mixed $Name 
*/ 
public function setName(String $Name){ $this->Name = $Name; } 

/** 
* @return mixed 
*/ 
public function getEmail(){ return $this->Email; } 

/** 
* @param mixed $Email 
*/ 
public function setEmail(String $Email){ $this->Email = $Email; } } 

现在使用Ajax调用函数我插在我的HTML网页代码提交一个电话,这是JS代码:

function formSubmitAjaxForm(form, e) { 
e.preventDefault(); 
var $this = $(form); 
var formType = $this.attr("method"); 
var formUrl = $this.attr("action"); 
var formData = $this.serialize(); 

$.ajax({type: formType, url: formUrl, data: formData}) 
    .done(function (data) { 
     var Result = data; 
     try { 
      // some code 
     } 
     catch (err) { 
      // some code 
     } 
     finally { 
      // some code 
     } 
    }) 
    .fail(function (jqXHR, textStatus, errorThrown) { 
         // some code 
    }); } 

AJAX调用我的控制器ajax_emailrequestFormAction功能。

public function ajax_emailrequestFormAction(Request $request) 
{ 
    $result = new Result(); 
    $emailrequestview = new View\EmailRequestView(); 
    $form = $this->createForm(new Type\EmailRequestType(), $emailrequestview, array('method' => 'POST')); 

    $form->handleRequest($request); 
    $data = $form->getData(); 

    /* Check if Method is POST */ 
    if ($request->isMethod('POST') == false) { 
     $result->setSuccessful(false); 
     $result->setMessage('You can access use Post Method!'); 
     return $result->ResponseJsonResult(400); 
    } 

    /* Check if Form is Submitted */ 
    if ($form->isSubmitted() === false) { 
     $result->setSuccessful(false); 
     $result->setMessage('Form not submitted.'); 
     return $result->ResponseJsonResult(200); 
    } 

    /* Check if Form is Valid */ 
    if ($form->isValid() === false) { 
     $result->setSuccessful($form->isValid()); 
     $result->setMessage('Form is not valid.'); 
     return $result->ResponseJsonResult(200); 
    } 


    /* DataBase Operation */ 

    $result->setContext(', Name: ' . $form->get('Name')->getData() . ', Email: ' . $form->get('Email')->getData()); 
    $result->setMessage('Request send Successfully.'); 
    return $result->ResponseJsonResult(200); 
} 

* 结果是:成功:假和消息:表单是不是valid.Details:ERROR:名称不能为空。错误:电子邮件不应该是空白 *

现在我试着编写这样的功能:

$form->submit($request); 

$form->handleRequest($request); 

$form->submit($request->request->get($form->getName())); 

,但我没有找到的正确方法得到的只是提交了形式的价值。

有人可以帮我吗? (注:Symfony的版本是2.7)

回答

0

解决:

所有我的代码是正确的。问题出在提交ajax调用期间,因为我使用了jQuery v 2.xx。 正确的解决方案是将该版本替换为jQuery v 1.xx

谢谢大家,无论如何!

0

始终采取的行动/方法匹配的护理:

$.ajax({ 
     url: urlSave, 
     method: "post", 
     data: elData,   
     dataType: 'json' 
    }) 

控制器动作

/** 
* Process Ajax Request 
* @Route("/update", name="update_item") 
* @Method("post") 
*/ 
public function ajaxItemUpdateItem(Request $request,){ 

而且formType

$form=$this->container->get('form.factory')->create(
      new FormType(), $item, array(
       'action' => $this->container->get('router')->generate('label_editor_update_item'), 
       'method' => 'post' 
      ) 
    ); 
相关问题