如何将JSON对象数组传递给全局处理程序?

时间:2011-05-15 21:10:51

标签: jquery asp.net ajax c#-4.0

我正在尝试使用jQuery.ajax(...)将数组传递回Global Handler(ashx):

var ingredients = [];
for (var i = 0; i < rows.get_length(); i++) {
    var row = rows.get_row(i);

    ingredients.push({
        ID : i,
        IngType : TypeXYZ,
        Quantity : 100
    });
}

$.ajax({
    url: "WebServices/Calculator.ashx",
    dataType: 'json',
    data: { Data : ingredients },
    success: Repopulate
});

但是,每当我在全局处理程序上收到这些结果时,我最终会得到context.Request.Params,其中包含大量密钥,例如:

"Data[0].ID"
"Data[0].IngType"
"Data[0].Quantity"
"Data[1].ID"
"Data[1].IngType"
"Data[1].Quantity"

我希望只有一个“数据”键,然后我可以使用JavaScript Serializer转换为可用的类。我做错了什么?

2 个答案:

答案 0 :(得分:2)

我建议使用没有任何JSON数据类型的POST方法,即将JSON字符串作为数据传递 - 例如,

$.ajax({
    url: "WebServices/Calculator.ashx",
    type: 'POST',
    data: ({ Data : JSON.stringify(ingredients) }), //using JSON2 library from json.org
    success: Repopulate
});

这应该发出一个带有单个数据参数的普通POST请求 - 因此,在服务器端,您可以使用context.Request.Form("data")获取JSON字符串,然后使用任何JSON反序列化器(JavaScriptSerializer,JOSN.NET)来获取对象。

答案 1 :(得分:0)

JavaScript Arrays via JQuery Ajax to an Asp.Net WebMethod

看看这个jquery方法:.serializeArray()

尝试json2.js库。 JSON.stringify(obj)会将您的对象转换为JSON字符串。

相关问题