我想用ajax和symfony保存一個實體。但總是出現錯誤。 這是我的代碼提交表格ajax symfony
<form id="form" class="full_form" {{form_enctype(form)}} action="{{ path('add_contact') }}" method="post" >
<div class="left small_width">
<div class="section-title">Ajout d'un contact</div>
<span>Les champs suivis d’une étoile sont obligatoires</span>
{{ form_widget(form.name,{ 'attr': {'maxlength': '50','placeholder':'placeholder.nom'|trans} }) }}
{{ form_widget(form.lastName, { 'attr': {'maxlength': '50','placeholder':'placeholder.prenom'|trans} }) }}
{{ form_widget(form.countryId,{ 'attr': {'maxlength': '50','placeholder':'placeholder.contact.country'|trans} }) }}
{{ form_widget(form.gsmPrimary, { 'attr': {'maxlength': '50','placeholder':'placeholder.contact.gsmPrimary'|trans} }) }}
{{ form_widget(form.gsmSecondary, { 'attr': {'maxlength': '50','placeholder':'placeholder.contact.gsmSecondary'|trans} }) }}
{{ form_widget(form.landlinePrimary, { 'attr': {'maxlength': '50','placeholder':'placeholder.contact.landlinePrimary'|trans} }) }}
{{ form_widget(form.landlineSecondary, { 'attr': {'maxlength': '50','placeholder':'placeholder.contact.landlineSecondary'|trans} }) }}
{{ form_widget(form.faxPrimary, { 'attr': {'maxlength': '50','placeholder':'placeholder.contact.faxPrimary'|trans} }) }}
{{ form_widget(form.faxSecondary, { 'attr': {'maxlength': '50','placeholder':'placeholder.contact.faxSecondary'|trans} }) }}
{{ form_widget(form.streetNumber) }}
在我的Java腳本代碼
:
<script>
initAjaxForm();
</script>
在我main.js
function initAjaxForm()
{
$('body').on('submit','full_form',function(e) {
e.preventDefault();
$.ajax({
type: $(this).attr('method'),
url: $(this).attr('action'),
data: $(this).serialize()
})
.done(function (data) {
if (typeof data.message !== 'undefined') {
alert(data.message);
}
})
.fail(function (jqXHR, textStatus, errorThrown) {
if (typeof jqXHR.responseJSON !== 'undefined') {
if (jqXHR.responseJSON.hasOwnProperty('form')) {
$('#form_body').html(jqXHR.responseJSON.form);
}
$('.form_error').html(jqXHR.responseJSON.message);
} else {
alert(errorThrown);
}
});
});
}
終於在我的控制器。創建操作如下所示。
public function createAction(Request $request)
{
if (!$request->isXmlHttpRequest()) {
return new JsonResponse(array('message' => 'You can access this only using Ajax!'), 400);
}
$contact = new Contact();
$form = $this->createForm(new ContactType(), $contact);
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($contact);
// $em->persist($label);
$em->flush();
return new JsonResponse(array('message' => 'Success!'), 200);
}
$response = new JsonResponse(
array(
'message' => 'Error',
'form' => $this->renderView('MyBundle:Contact:new.html.twig',
array(
'entity' => $contact,
'form' => $form->createView(),
'form2' => $form2->createView()
))), 400);
return $response;
但我總是遇到一個錯誤,「只能用ajax訪問它」。
有沒有人向我們展示如何使用ajax發送表單。 我嘗試了兩個在網上找到的例子,但總是一樣的結果。
看起來像你的JavaScript代碼沒有運行。檢查控制檯上的JavaScript錯誤,如Firebug的一個或任何類似的工具。例如,我在$('body')中看到一個拼寫錯誤。('submit','full_form',function(e){,忘記在「full_form」之前添加一個「。」。 – viktor77