【问题标题】:Adding/push() Values to Ajax POST in jQuery serialize() or serializeArray()在 jQuery serialize() 或 serializeArray() 中向 Ajax POST 添加/push() 值
【发布时间】:2010-12-15 12:05:41
【问题描述】:

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] 部分不起作用?这不是推: ,{"name":"total","value": [..]

php 输出通过 print_r ($_POST)

[b]-版本

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]-版本

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 )

希望我的问题/疑问很清楚。 最好的方法是什么? 有更好的方法来识别吗?

【问题讨论】:

    标签: jquery serialization add


    【解决方案1】:

    应该是这样的:

    $('#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, ""))}]);
    

    【讨论】:

    • 是否可以将 $('#form1').serializeArray() 和 $('#form2').serializeArray() 结合起来通过ajax发送?
    • @hoerf - 哦,是的,这样做:var arr = $('#form1').serializeArray(); $.merge(arr, $('#form2').serializeArray());,然后arr 将包含两者的内容,只需将其用于您的data 参数。
    【解决方案2】:

    您可以将表单和序列化数组结合起来

    $('#frm1, #frm2').serializeArray()
    

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 2021-12-07
      • 1970-01-01
      • 2010-12-16
      • 2020-07-26
      • 2016-11-09
      • 2017-08-23
      • 1970-01-01
      • 2012-05-12
      相关资源
      最近更新 更多