【问题标题】:getting json data from ajax post从ajax post获取json数据
【发布时间】:2016-03-03 00:16:28
【问题描述】:

我正在尝试从 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);

【问题讨论】:

    标签: c# jquery .net json ashx


    【解决方案1】:

    您需要使用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-ready 格式。

    这里可以解析成更接近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 format description。如果您获得的字符串来自您的服务器应用程序,则必须从服务器端将其转换为 json。如果它来自外部应用程序,您必须自己解析字符串。有一些关于解析http查询的文章,但没有直接解析为json。
    【解决方案2】:

    我用JSON.stringify(data)解决了这个问题

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

    【讨论】:

      猜你喜欢
      • 2013-12-20
      • 2020-01-22
      • 2018-06-03
      • 2016-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-01
      相关资源
      最近更新 更多