asp.net jquery ajax json:交换数据的简单例子

时间:2012-06-29 22:15:02

标签: jquery asp.net ajax json

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

非常感谢帮助获取在浏览器(使用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“Request”。我想做的就是看到数据双向移动,而我似乎只有一半。任何帮助将不胜感激。

- 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&amp; field2 = Y&amp; field3 = Z ..),因此在ASP.NET中使用Request.Form [“field”]显示。

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

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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分: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;
        }
    }
}