2017-12-18 31 views
-3

Ich versuche, 2 symfony Formulare einreichen in einer einreichen AjaxEinreichen 2 symfony Formulare mit Ajax

var data = $('#facebookPostTargetForm').serialize(); 
data = data.concat("\r\n", $('#facebookPostForm').serialize()); 
$.ajax({ 
    url: '{{ path('facebookpostwizard_new') }}', 
    type: "POST", 
    data: data, 
    dataType: 'html', 
    success: function(data){ 
    //console.log(data); 
    alert('OK'); 
    } 
    }); 

fast alles ordnungsgemäß funktioniert, außer dem Fall, dass in meinem Controller, wenn ich $form->handleRequest($request) ich einige Schwierigkeiten das letzte Feld der ersten Form bekommen (meistens _Token also $form->isValid() immer falsch zurückgeben) und erstes Feld des zweiten! Ich gebe hier keinen Ausschnitt meines Controllers, denn wenn ich nur ein Formular einreiche funktioniert alles perfekt, es scheint mit der data.concat() verwandt zu sein, aber ich habe viele Dinge ausprobiert und es funktioniert nicht. Danke im Voraus!

+3

"einige Probleme" und "funktioniert nicht" bedeutet was genau? Beschreibungen von Fehlermeldungen und/oder unerwartetem Verhalten wären angemessener als diese vagen Aussagen. Aber ... warum fügen Sie Zeilenumbrüche vor Ihren serialisierten Formulardaten hinzu? Wofür ist das? Ich bezweifle, dass der Server verstehen wird, was Sie einreichen möchten. – ADyson

Antwort

2

Ohne Ihren PHP-Code zu kennen, kann ich nur vermuten, was das Problem ist. Aber ich vermute, dass Sie das Array, das Sie richtig erhalten, nicht behandeln. Oder vielmehr, du versuchst etwas ganz anderes aufzubauen als das, was du tatsächlich sendest.

concat() verkettet keine Strings, sondern Arrays. Wenn Sie nur die serialisierten Query-Strings der Formulare verketten möchten, können Sie einfach + Operator wie folgt verwenden:

var data = $('#facebookPostTargetForm').serialize() + '&' + $('#facebookPostForm').serialize(); 

Das wird eine große Abfrage-String aus beiden Formen machen und Sie werden sie als POST-Variablen haben in das Objekt . Beachten Sie, dass dies nur funktioniert, wenn die Felder in beiden Formularen unterschiedlich benannt sind. Wenn ein Feld denselben Namen hat, überschreibt form2 form1.

Wenn Sie die gleichen Feldnamen verwenden und die Formen getrennt behandeln wollen, sollten Sie ein Objekt statt einer Form schreiben:

var data = { 
    'form1': $('#facebookPostTargetForm').serializeArray(), 
    'form2': $('#facebookPostForm').serializeArray() 
}; 

Dies wird ein Objekt ob Objekte (oder ein mehrdimensionales assoziatives Array einreichen in PHP-Sprache). Sie können dann in PHP wie folgt auf sie zugreifen:

$form1 = $request->get('form1'); 
$field1 = $form1['field1'] 
+0

good point @masterfloda Ich habe meinen Beitrag gelöscht, seit ich bemerkt habe, dass es redundant ist –

+0

Hallo, es war sehr nützlich, nur um zu sagen, dass ich concat in Strings basierend auf diesem https://www.w3schools.com/js/js_string_methods.asp verwende, Ich habe nur die Tatsache vermisst, '&' in concat zu verwenden und es funktioniert wie ein Zauber !! Ich denke, ich kann das nicht als Antwort bezeichnen und es ist eine Schande !!! Danke trotzdem!!!! –

+0

@masterfloda gibt es einen ähnlichen Weg zu "var data = $ ('# facebookPostTargetForm'). Serialize() + '&' + $ ('# facebookPostForm'). Serialize();" aber Hochladen von Dateien in einer verwandten Form ???? Danke im Voraus!!! –