getJSON数组参数数据
本文关键字:数据 参数 数组 getJSON | 更新日期: 2023-09-27 18:11:13
我有一个数组参数传递给我的。ashx处理程序的问题。Querystring参数工作良好,但我不知道如何从ashx文件内访问数组。
我的数组是一个名为list的字符串列表。下面是getJSON方法的调用方式:
jQuery.getJSON('Handlers/AccessoryUpdateHandler.ashx?action=updateselection&a=' + a_sku, function (list) {
//...
});
在AccessoryUpdateHandler 。我可以使用context.Request.QueryString["a"];
但是我怎么得到数组数据呢?我看过请求书了。QueryString对象但是没有任何东西看起来像我的数组
如果有更好的方法,我也很想知道。
也许您不应该依赖QueryString来传递数据类型。我建议您使用"POST"方法代替。在任何一种情况下,使用您正在使用的方法,您都不能将数据作为数组传递。将数组转换为字符串。如果您不想手动将数组转换为字符串,那么像stringify()这样的实用程序可以派上用场。当您从请求提取字符串时。QueryString或请求。表单(如果你使用post)在处理程序中,你可以很容易地使用JavaScriptSerializer来反序列化,使用一个简单的c#类,具有类似于你的json数组的模式。
编辑:插图
数组,如:
var ary = [{ "id": "1", "name": "Mark" }, { "id": "2", "name": "John"}];
可以转换为如下字符串:
var aryS = "[{'"id'":'"1'",'"name'":'"Mark'"},{'"id'":'"1'",'"name'":'"Mark'"}]";
那么,您的QueryString可以构造为:
jQuery.getJSON('Handlers/AccessoryUpdateHandler.ashx?action=updateselection&a=' + aryS, function (list) {
//...
});
当您转到处理程序代码时,可以使用一个简单的类来帮助您反序列化数据:
class Rec
{
public int Id { get; set; }
public string Name { get; set; }
}
有了,反序列化的最后一步是:
string s = context.Request.QueryString["a"]; // HttpContext context
var jserializer = new JavaScriptSerializer();
var ary = jserializer.Deserialize<Rec[]>(s);
注意你必须在反序列化函数中使用Rec[],因为你是反序列化成一个数组。ary将是一个包含javascript数组中所有数据的Rec数组。你需要引用System.Web.Extensions来使用JavaScriptSerializer
编辑:我以为你说的是一个对象数组。如果它只是一个*长*s的数组,那么以下几行应该足够了:
string s = context.Request.QueryString["a"]; // HttpContext context
var jserializer = new JavaScriptSerializer();
var ary = jserializer.Deserialize<long[]>(s);
,你不需要创建类。只有当你有一个json对象数组
我不认为你需要传递数组应该决定你是否使用get或post其他人建议。
使用get,最惯用的方法是多次使用相同的参数。例如
Handlers/AccessoryUpdateHandler.ashx?a=1&a=2&a=55
事实上,在大多数框架中。. NET是例外)当你从url得到一个参数,你得到一个数组返回(通常只有一个项目)
我的建议是你解析context.Request.RawUrl