2016-07-10 9 views
1

Ich habe diese FormSerialize Formulardaten in Array-Notation

<form action="" method="post"> 
    <input type="hidden" name="one" value="somevalue"> 
    <input type="hidden" name="two" value="anothervalue"> 
    <input type="hidden" name="three" value="someothervalue"> 
</form> 

Ich kann auch jQuery verwenden.

Wie kann ich serialisiert werden die Formulardaten die $.post() oder $.ajax() Methoden zu erhalten, die Daten in der HTTP-Anforderung auf diese Weise zu senden:

mydata[one]: somevalue 
mydata[two]: anothervalue 
mydata[three]: someothervalue 

Statt:

one: somevalue 
two: anothervalue 
three: someothervalue 

Antwort

1

Zwei Vorschläge:

1) den Namen direkt eingeben:

<input type="hidden" name="mydata[one]" value="somevalue"> 

2) ändern Sie die Namen des Formulars nach dem Laden (wenn Sie ein dynamisches Verhalten wollen). So etwas Ähnliches (nicht getestet):

$(document).ready(function() { 
    var prefix = 'data'; //or get from some data- attribute 
    $('form input').each(function() { 
     $(this).attr('name', prefix + '[' + $(this).attr('name') + ']'); 
    }); 
}); 

Dann, wenn Sie Ihre Daten über AJAX + jQuery senden möchten, ein Ansatz ist Ihre Formulardaten mit serialize() serialisiert.

+0

Ja, ist zweite Wahl, was ich schließlich verwendet. Ich kann das Quell-HTML-Formular nicht ändern, deshalb benötigte ich eine Client-seitige Lösung. –

0

Sie können ein Array nicht über $.ajax() senden, aber Sie können eine JSON-Zeichenfolge senden. Also, so etwas wie dies funktionieren würde:

var frm = $(document.myform); 
var data = JSON.stringify(frm.serializeArray()); 

Beispiel:

$.ajax({ 
    type: "POST", 
    url: targetURL, 
    data: JSON.stringify($('#form').serializeArray()) 
}) 
.done(function(data){ 
     console.log(data); 
     return true; 
}) 
.complete(function() {}) 
.error(function(xhr, textStatus, errorThrown) { 
    console.log('ajax loading error...'); 
    return false; 
    } 
}); 

Auf PHP Seite, benutzen Sie json_decode die JSON zurück in ein Array zu drehen:

// decode JSON string to PHP object, 2nd param sets to associative array 
$decoded = json_decode($_REQUEST['data'],true); 

output values: 
foreach ($decoded as $value) { 
    echo $value["name"] . "=" . $value["value"]; 
} 

Referenzen:

https://www.sitepoint.com/jquery-php-ajax-json/

https://stackoverflow.com/a/11338832/1447509

https://jsfiddle.net/gabrieleromanato/bynaK/

+0

Cool, ich habe vergessen zu sagen, ich brauchte eine Client-Side-Lösung. Mrlew zeigte in die richtige Richtung. Danke trotzdem, Mann. –