jquery serializeArray()有时会产生空字符串或空数组

时间:2013-01-23 22:04:34

标签: javascript jquery asp.net

我有一个aspx.net页面,其中包含大型表单以添加订单 此页面包含一个包含许多订单行的表格 每个订单行,有20个表单字段和5个隐藏字段。

有一个打印按钮可以打印订单,但在此之前它必须先保存它。

我的问题是,当我使用$("form").serializeArray()时,数组是空的1到1.000.000倍 我使用哪种浏览器并不重要。

这让我很疯狂,因为很多用户都在叫我解决这个问题a.s.a.p.
我不知道从哪里开始调试。

  • 问题是serializeArray()吗?
  • 或者postdata可能很大还是腐败?
  • 也许WebMethod需要一些额外的属性?

这是我的打印按钮

<input type='button' title='Print' onclick='PrintOrder(true)' />
function PrintOrder(autosave) {
  if (autosave) {
    // save my order and call a callback function after it's completed
    AutoSaveForm(function () {
      PrintOrder(false);
    });
  } else {
    // show my pdf page
    window.open('printorder.pdf');
    return;
  }
}

var inAutoSaveForm = false;

// this function is needed to autosave my order
// fn is a callback function when it's successfull done.
function AutoSaveForm(fn) {
  if (!inAutoSaveForm) {
    // serializeArray to post my form by the ajax function
    var fields = $("form").serializeArray();

    // json format
    var myData = {
      'orderId': orderId,
      'fields': fields
    };

    myData = JSON.stringify(myData);

    ShowLoader();

    $.ajax({
      type: "POST",
      url: "/Order.aspx/AutoSave",
      contentType: "application/json; charset=utf-8",
      timeout: (1000 * 60 * 10),
      data: myData,
      dataType: "json",
      success: function () {
        setTimeout(function () {
          fn.call();
        }, 25);
      },
      error: function (x, t, m) {
        alert("Error, please try again later.\n\n" + t);
      },
      complete: function (msg) {
        // .. do nothing yet
      }
    });

    inAutoSaveForm = true;
  } else {
    fn.call();
  }
}

这是我保存订单的.NET代码 也许我必须为WebMethod添加一些属性?

[WebMethod]
public static string VerwerkForm(field[] fields) {
    // do the magic
    return "ok";
}

public class field {
    public string name { get; set; }
    public string value { get; set; }
}

0 个答案:

没有答案