Hinzufügen/push () - Werte zu Ajax POST in jQuery serialize() oder serializeArray()
jQuery
$('#speichern').live('click' , function () {
// [a] var data_save = $('#form_rechn').serializeArray();
var data_save_ser = $('#form_rechn').serialize(); //[b]
// [a] data_save[data_save.length] = {"name":"action","value":"save" },{"name":"total","value": Number($('#grandTotal').text().replace(/EUR/g, ""))};
var addintional = 'action=save&mysql=update' + '&' + 'total=' + Number($('#grandTotal').text().replace(/EUR/g, ""));//[b]
var data_save = data_save_ser + '&' + addintional;//[b]
$.ajax({
type : "POST",
cache : false,
url : 'invoice_new_action.php',
data : data_save,
error:function (xhr, ajaxOptions, thrownError){
alert(xhr.status);
alert(thrownError);
},
success : function(data) {
$.fancybox(data);
}
});
});
Den [b]-Teil funktioniert sehr gut; aber, warum funktioniert nicht die [a]-Teil? Dies ist nicht gedrückt:
,{"name":"total","value": [..]
php Ausgabe per print_r ($_POST)
[b]-version
Array ( [pnr_item_1] => 1 [pkt_item_1] => HostingXXL [desc_item_1] => 20GB, 1x.de [qty_item_1] => 4 [price_item_1] => 15.5 .... [action] => save [mysql] => update [total] => 62 )
[a]-version
Array ( [pnr_item_1] => 1 [pkt_item_1] => HostingXXL [desc_item_1] => 20GB, 1x.de [qty_item_1] => 4 [price_item_1] => 15.5 .... [action] => save )
Hoffentlich mein problem/Frage ist klar.
Was ist die beste Methode?
Es gibt bessere Methoden, um so id?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollte es so Aussehen:
Was Sie wollen, schieben Sie auf das array sind Objekte, die in form von
{name: "name", value: "value"}
werden, dann werden Sie serialisiert werden,/kodiert richtig. Option[a]
(korrigierte form) ist in der Regel viel besser als option[b]
, da[b]
ist keine Eigenschaft kodiert und fehl moment keine ungültigen Zeichen rutscht, um mess up Ihre Variablen. In diesem Fall, weil man die Kontrolle über den Inhalt angehängt, du bist sicher...aber es ist am besten, um zu gehen den Weg, der immer funktioniert: nie erstellen Ihredata
argument als string direkt.Als für das warum
[a]
funktioniert nicht:Dieser ist nicht gültig, Sie können nicht zuweisen, 2 Dinge auf einmal sind, müssen Sie entweder es so machen:
oder diese (meine bevorzugte Methode, wie oben verwendet):
....oder, verwenden Sie
$.merge()
(ein wenig verschwenderisch, aber sauberer suchen), etwa so:var arr = $('#form1').serializeArray(); $.merge(arr, $('#form2').serializeArray());
, dannarr
wird der Inhalt der beiden, nur verwenden Sie es für Ihredata
argument.Können Sie beides miteinander verbinden, die Formen und serializeArray
.serialize()