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

asp.net jquery ajax json:交换数据的简单示例,jquery,asp.net,ajax,json,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 "

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

如果您能提供一个在浏览器(使用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>
但VisualStudio的“请求”似乎没有定义。我想做的就是看到数据双向移动,而我似乎已经做到了一半。任何帮助都将不胜感激

--C#代码--

使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
命名空间CSASPNETSerializeJsonString
{
/// 
///ericHandler的摘要说明
/// 
公共类处理程序:IHttpHandler
{
公共void ProcessRequest(HttpContext上下文)
{
字符串rq=context.Request.QueryString[“par”];
context.Response.ContentType=“应用程序/json”;
context.Response.Write(“{\'eric\':\'12345\'”);
}
公共布尔可重用
{
得到
{
返回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#对象。

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

HTML:


$(文档).ready(函数(){
$.ajax({
url:'Handler.ashx',
键入:“POST”,
成功:功能(数据){
警报(数据);
},
错误:函数(数据){
警报(“错误”);
}
});
});
代码隐藏:

<%@ 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;
        }
    }
}

使用制度;
使用System.Web;
公共类处理程序:IHttpHandler
{
公共void ProcessRequest(HttpContext上下文)
{
context.Response.ContentType=“text/plain”;
context.Response.Write(“helloworld”);
}
公共布尔可重用
{
得到
{
返回false;
}
}
}

其他资源建议删除
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(); 

这里提到过:

我尝试了您建议的方法(stringify),但没有改变——在接收的C#代码中,变量rq为null,检查“context.Request.QueryString”显示的是一个空集“{}”。另外,其他示例不使用stringify——请参见@EricSchneider——您是正确的。jQuery为您完成了这项工作。因为您使用的是HTTP POST方法。您需要通过请求访问您的值。表单[“myValue”]。我已经编辑了我的回复。使用Request.Form没有帮助,但是您第二次建议使用Request.InputStream成功了!我得到JavaScript生成的序列化数据。当然,现在需要对其进行解析,这可能是问题的根源,因为ASP.NET可能没有从JSON到某些数据结构的良好映射。最后,非常感谢!我花了几个小时思考和研究这个问题。我从各种文章中得到的印象是ASP.NET内置了JSON支持,但我不确定这意味着什么。。。EricOne最后一条评论,在JavaScript代码中使用赋值“var myData={“par”:“smile”,smart:345};”,并使用前面提到的Request.InputStream获取传递的数据,如果在发送之前不使用stringify,您将收到par=smile&smart=345,而使用stringify,您将收到,{“par”:“smile”,“smart”:345}。您的示例显示数据从ASP.NET传递到浏览器,但我遇到的问题是将其移到另一个方向。因此,失败的一行是:“string rq=context.Request.QueryString[“par”];”——我试图将myData的“par”定义从浏览器传递到ASP.NET。还有什么想法吗(谢谢你迄今为止的努力!)?谢谢!这很有帮助--我会把我的总结放在我原来的帖子里。。。埃里克
  $.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();