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

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] -part不起作用?这不推动:
,{“name”:“total”,“value”:[..]

PHP输出通过print_r($_POST)

并[b] -version

阵列([pnr_item_1] =→1 [pkt_item_1] => HostingXXL [desc_item_1] => 20GB,1x.de [qty_item_1] =→4 [price_item_1] => 15.5 … [动作] =&GT ; save [MysqL] => update [total] => 62)

[厌恶

阵列([pnr_item_1] =→1 [pkt_item_1] => HostingXXL [desc_item_1] => 20GB,1x.de [qty_item_1] =→4 [price_item_1] => 15.5 … [动作] =&GT ; 保存 )

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

解决方法

它应该如下所示:
$('#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",error   : function (xhr,thrownError){
         alert(xhr.status);
         alert(thrownError);
      },success : function(data) { 
         $.fancybox(data); 
      }
    });
});

你想要推送到数组的是{name:“name”,value:“value”}形式的对象,然后它们将被正确地序列化/编码.选项[a](它的校正形式)通常比选项[b]好得多,因为[b]不是属性编码的,并且当任何无效字符在那里滑动以弄乱变量时将失败.在这种情况下,因为你控制了附加的内容,所以你是安全的……但是最好是总是有效的路径:永远不要直接将数据参数创建为字符串.

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

data_save[data_save.length] = {"name":"action",""))};

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

data_save[data_save.length] = {"name":"action","value":"save" };
data_save[data_save.length] = {"name":"total",""))};

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

data_save.push({"name":"action","value":"save" });
data_save.push({"name":"total",""))});

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

$.merge(data_save,[{"name":"action",""))}]);

相关文章

jQuery插件的种类 1、封装对象方法 这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进...
扩展jQuery插件和方法的作用是非常强大的,它可以节省大量开发时间。 入门 编写一个jQuery插件开始于给...
最近项目中需要实现3D图片层叠旋转木马切换的效果,于是用到了jquery.roundabout.js。 兼容性如图: ht...
一、什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作。其中,既有异...
AMD 模块 AMD(异步模块定义,Asynchronous Module Definition)格式总体的目标是为现在的开发者提供一...