gpt4 book ai didi

jquery - 在 jQuery Serialize() 或 SerializeArray() 中向 Ajax POST 添加/push() 值

转载 作者:行者123 更新时间:2023-12-03 22:34:27 26 4
gpt4 key购买 nike

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);
}
});
});

[b]部分效果很好;但是,为什么 [a] 部分不起作用?这不是推送的: ,{"名称":"总计","值": [..]

通过 print_r ($_POST) 进行 php 输出

[b]-版本

数组 ( [pnr_item_1] => 1 [pkt_item_1] => HostingXXL [desc_item_1] => 20GB, 1x.de [qty_item_1] => 4 [price_item_1] => 15.5 .... [操作] = > 保存 [mysql] => 更新 [total] => 62 )

[a]-版本

数组 ( [pnr_item_1] => 1 [pkt_item_1] => HostingXXL [desc_item_1] => 20GB, 1x.de [qty_item_1] => 4 [price_item_1] => 15.5 .... [操作] = > 保存)

希望我的问题很清楚。最好的方法是什么?有更好的方法来获取 id 吗?

最佳答案

它应该看起来像这样:

$('#speichern').live('click' , function () {
var data_save = $('#form_rechn').serializeArray();
data_save.push({ name: "action", value: "save" });
data_save.push({ name: "mysql", value: "update" });
data_save.push({ name: "total", value: Number($('#grandTotal').text().replace(/EUR/g, "")) });
$.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);
}
});
});

您想要推送到数组上的是{name: "name", value: "value"} 形式的对象,然后它们将被正确序列化/编码。选项[a](其更正后的形式)通常比选项[b]好得多,因为[b] 不是属性编码的,并且当任何无效字符滑入其中以弄乱您的变量时就会失败。在这种情况下,因为您可以控制附加的内容,所以您是安全的...但最好走始终有效的路线:永远不要直接将 data 参数创建为字符串。

<小时/>

至于为什么[a]不起作用:

data_save[data_save.length] = {"name":"action","value":"save" },{"name":"total","value": Number($('#grandTotal').text().replace(/EUR/g, ""))};

这是无效的,您不能同时分配两件事,您要么需要这样做:

data_save[data_save.length] = {"name":"action","value":"save" };
data_save[data_save.length] = {"name":"total","value": Number($('#grandTotal').text().replace(/EUR/g, ""))};

或者这个(我的首选方法,如上所述):

data_save.push({"name":"action","value":"save" });
data_save.push({"name":"total","value": Number($('#grandTotal').text().replace(/EUR/g, ""))});

...或者,使用 $.merge() (有点浪费,但看起来更干净),像这样:

$.merge(data_save, [{"name":"action","value":"save" }, {"name":"total","value": Number($('#grandTotal').text().replace(/EUR/g, ""))}]);

关于jquery - 在 jQuery Serialize() 或 SerializeArray() 中向 Ajax POST 添加/push() 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4449695/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com