从 Ajax Post 获取 JSON 数据

本文关键字:JSON 数据 获取 Post Ajax | 更新日期: 2023-09-27 18:37:16

我正在尝试从 ashx 文件中的 jquery ajax 中获取 json 数据,但结果不知何故无法使用。 如何获取它并将其绑定到动态或替代?

public void ProcessRequest(HttpContext context)
{
    context.Response.ContentType = "text/plain";
    var result = new StreamReader(context.Request.InputStream).ReadToEnd();
}

结果

maintype=Entity.JobApplication&feeds=&fields%5B0%5D%5Bkey%5D=EmployeeRequest&fields%5B0%5D%5Bvalue%5D=1&fields%5B1%5D%5Bkey%5D=State&fields%5B1%5D%5Bvalue%5D=1&fields%5B2%5D%5Bkey%5D=FirstName&fields%5B2%5D%5Bvalue%5D=11&fields%5B3%5D%5Bkey%5D

=LastName&fields%5B3%5D%5Bvalue%5D=22

**json data**
var data = {
  "maintype": "Entity.JobApplication",
  "feeds": "",
  "fields": [
    {
      "key": "EmployeeRequest",
      "value": ""
    },
    {
      "key": "State",
      "value": ""
    },
    {
      "key": "FirstName",
      "value": ""
    },
    {
      "key": "LastName",
      "value": ""
    }
  ]
};

var data = <%=AjaxJSON%>;
for (var i in data.fields)
{
    var o = $("[prop=" + data.fields[i].key + "]");
    data.fields[i].value = o.val();
}
genericAjax("/_Handler/CreateEntity.ashx", data);

从 Ajax Post 获取 JSON 数据

你需要使用 WebUtility.UrlDecode 来解码你的字符串。

public void ProcessRequest(HttpContext context)
{
    context.Response.ContentType = "text/plain";
    var result =WebUtility.UrlDecode(new StreamReader(context.Request.InputStream).ReadToEnd());
}

结果:

maintype=Entity.JobApplication&feeds=&fields[0][key]=EmployeeRequest&fields[0][value]=1&fields[1][key]=State&fields[1][value]=1&fields[2][key]=FirstName&fields[2][value]=11&fields[3][

key]=LastName&fields[3][value]=22

顺便说一下,您获得的数据不是 JSON 就绪格式。

在这里你可以解析它到更接近json(添加参考:System.Web,System.Web.Extension):

string s = "maintype=Entity.JobApplication&feeds=&fields%5B0%5D%5Bkey%5D=EmployeeRequest&fields%5B0%5D%5Bvalue%5D=1&fields%5B1%5D%5Bkey%5D=State&fields%5B1%5D%5Bvalue%5D=1&fields%5B2%5D%5Bkey%5D=FirstName&fields%5B2%5D%5Bvalue%5D=11&fields%5B3%5D%5Bkey%5D=LastName&fields%5B3%5D%5Bvalue%5D=22";
var dict = System.Web.HttpUtility.ParseQueryString(s);
var json = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(
                    dict.AllKeys.ToDictionary(k => k, k => dict[k]));

您将获得:

{"maintype":"Entity.JobApplication","feeds

":","fields[0][key]":"EmployeeRequest","fields[0][value]":"1","fields[1][key]":"State","fields[1][value]":"1","fields[2][key]":"FirstName","fields[2][value]":"11","fields[3][key]":"LastName","fields[3][value]":"22"}

再做几个步骤,你可以把它转换为json。

我通过使用JSON.stringify(data)解决了它

genericAjax("/_Handler/CreateEntity.ashx", JSON.stringify(data));