简体   繁体   English

从ajax发布获取json数据

[英]getting json data from ajax post

I am trying to get json data from my jquery ajax in ashx file, but result is somehow unusable. 我试图从ashx文件中的jquery ajax获取json数据,但结果以某种方式无法使用。 how can I get and bind it to dynamic or alternative? 如何获取并将其绑定到动态或替代方法?

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

result 结果

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 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);

You need to use WebUtility.UrlDecode to decode your string. 您需要使用WebUtility.UrlDecode来解码您的字符串。

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

Result: 结果:

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 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

By the way, the data you get is not Json-ready format. 顺便说一下,您获得的数据不是支持Json的格式。

Here you can parse it to more close to json (Add reference: System.Web, System.Web.Extension): 在这里,您可以将其解析为更接近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]));

You will get: 你会得到:

{"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"} {“ maintype”:“ Entity.JobApplication”,“ feeds”:“”,“ fields [0] [key]”:“ EmployeeRequest”,“ fields [0] [value]”:“ 1”,“ fields [1 ] [key]“:”状态“,” fields [1] [value]“:” 1“,” fields [2] [key]“:”名字“,” fields [2] [value]“:” 11 “,” fields [3] [key]“:”姓氏“,” fields [3] [value]“:” 22“}

Do a few more step you can convert it to json. 再做几步,您可以将其转换为json。

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

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM