(问题在两个回复帖子的帮助下得到解决——见下文)
如果能获得一个在浏览器(使用 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# 对象。