我正在尝试使用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转换为可用的类。我做错了什么?
答案 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字符串。