在jQuery serialize()或serializeArray()中将值/ push()值添加到Ajax POST

hoe*_*erf 7 jquery serialization add

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); 
            }
    });
    });
Run Code Online (Sandbox Code Playgroud)

[b] -part效果很好; 但是,为什么不能[a] -part工作?这不是推动: ,{"name":"total","value": [..]

php输出通过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 )

[厌恶

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 )

希望我的问题/疑问很明确.什么是最好的方法?还有更好的方法来识别吗?

Nic*_*ver 28

它应该如下所示:

$('#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); 
      }
    });
});
Run Code Online (Sandbox Code Playgroud)

你想要推送到数组的是形式的对象{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, ""))};
Run Code Online (Sandbox Code Playgroud)

这是无效的,你不能一次分配2件事,你需要这样做:

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

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

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

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

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