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对象但是没有任何东西看起来像我的数组

如果有更好的方法,我也很想知道。

getJSON数组参数数据

也许您不应该依赖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