0

我正在构造一个这样的对象数组:

var postData = [];

$.each(selectedFields, function (index, value) {
    var testTitle = 'testing ' + index;
    postData.push({title: testTitle, title2 : testTitle});        
}

然后我像这样发布它(请注意,我尝试了许多不同的方法):

$.post('SaveTitlesHandler.ashx', { form : postData }, function (data) {
    console.log(data);
});

然后我尝试在处理程序中获取数据......

public class SaveTitlesHandler : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        string json = context.Request.Form.ToString();
    }

}

我似乎无法从请求中得到正确的 json。有人知道吗?

干杯。

TWD

4

1 回答 1

11

您没有发布 JSON。您正在使用application/x-www-form-urlencoded. 因此,在处理程序内部,您可以访问单个值:

public void ProcessRequest(HttpContext context)
{
    var title1 = context.Request["form[0][title]"];
    var title2 = context.Request["form[0][title2]"];

    var title3 = context.Request["form[1][title]"];
    var title4 = context.Request["form[1][title2]"];

    ...
}

如果你想发布真正的 JSON,你需要这个:

$.ajax({
    url: 'SaveTitlesHandler.ashx',
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify(postData),
    success: function(result) {
        console.log(result);
    }
});

然后在从请求输入流中读取的处理程序中:

public void ProcessRequest(HttpContext context)
{
    using (var reader = new StreamReader(context.Request.InputStream))
    {
        string json = reader.ReadToEnd();
    }
}

JSON.stringify方法将 javascript 对象转换为 JSON 字符串,它是现代浏览器内置的本机方法。如果您想支持旧版浏览器,您可能还需要包含json2.js 。

于 2011-06-21T06:46:08.537 回答