5

(问题在两个回复帖子的帮助下得到解决——见下文)

如果能获得一个在浏览器(使用 JavaScript/JQuery)和 ASP.NET(使用 Visual Studio 2010)之间交换数据 JSON 数据的简单示例,我将不胜感激。

当我单击一个按钮时,将执行以下操作:

 <script type="text/javascript">
    bClick = function () {
        var myData = { "par": "smile" };
        alert("hi "+myData.par);
        $.ajax({
            url: "ericHandler.ashx",
            data: myData,
            dataType: 'json',
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            success: function (data) { alert("DIDit = " + data.eric); },
            error: function (data, status, jqXHR) { alert("FAILED:" + status); }
        });
    }
</script>

在 Visual Studio 中,我有以下与 ashx 文件关联的代码。当我运行它并单击按钮时,一切都按预期工作,除了我没有看到 myData 传递给 C# 代码——我在调试器中查看 context.Request.QueryString 并显示“{}”。

我看过使用的例子

string stringParam = (string)Request.Form("stringParam");

但似乎没有定义 Visual Studio“请求”。我想做的就是看到数据双向移动,而我似乎已经完成了一半。任何帮助,将不胜感激。

--C#代码--

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace CSASPNETSerializeJsonString
{
/// <summary>
/// Summary description for ericHandler
/// </summary>
public class ericHandler : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        string rq = context.Request.QueryString["par"];

        context.Response.ContentType = "application/json";
        context.Response.Write("{\"eric\":\"12345\"}");
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

}

*已解决 首先,如果您想将一些表单参数从 JavaScript 发送到 ASP.NET,则应使用下面第二篇文章中的 ajax 调用,并且不要对数据使用 stringify。换句话说,如果不指定要发送的数据是 json,则缺少任何规范默认为 'application/x-www-form-urlencoded')。这将导致对象的字段以“url”格式附加(field=X&field2=Y&field3=Z..),从而使用 Request.Form["field"] 在 ASP.NET 中显示。

其次,如果你真的想发送 JSON 数据,那么指定这个类型就是发送的内容(就像我在上面所做的那样)并在接收端使用 InputStream。然后需要进一步解析接收到的字符串以获取字段值。

在我的示例中,我将“手动”编码为字符串的 JSON 数据发回。我相信有一个 JSON 序列化例程,以便可以发送 C# 对象。

4

2 回答 2

5

其他资源建议contentType: 'application/json; charset=utf-8',从 AJAX 调用中删除:

  $.ajax({ 
            url: "ericHandler.ashx", 
            data: myData, 
            dataType: 'json', 
            type: 'POST', 
            success: function (data) { alert("DIDit = " + data.eric); }, 
            error: function (data, status, jqXHR) { alert("FAILED:" + status); } 
        }); 

读取服务器端的值:

string myPar = context.Request.Form["par"]; 

你也可以试试:

string json = new StreamReader(context.Request.InputStream).ReadToEnd(); 

这里提到:https ://stackoverflow.com/a/8714375/139917

于 2012-06-29T23:03:22.730 回答
3

我马上就搞定了。这是它最基本的形式:

HTML:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>

    <script language="javascript" type="text/javascript">
        $(document).ready(function () {
            $.ajax({
                url: 'Handler.ashx',
                type: 'POST',
                success: function (data) {
                    alert(data);

                },
                error: function (data) {
                    alert("Error");
                }
            });
        });
    </script>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">

    </form>
</body>
</html>

代码背后:

<%@ WebHandler Language="C#" Class="Handler" %>

using System;
using System.Web;

public class Handler : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain";
        context.Response.Write("Hello World");
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}
于 2012-06-29T22:44:12.463 回答