通过两个回复帖子的帮助,问题得到了解决--请见下文。
我需要帮助获取一个简单的示例,用于在浏览器(使用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 文件相关联的以下代码。当我运行它并单击按钮时,除了我在调试器中查看 context.Request.QueryString 显示 "{}" 之外,一切都按预期工作,但我没有看到 myData 传递给 C# 代码。
我已经看过使用
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&field2=Y&field3=Z..)附加,并因此在ASP.NET中使用Request.Form [“field”]显示。
其次,如果您确实想发送JSON数据,则应指定要发送的类型(就像我上面所做的那样),并在接收端使用InputStream。然后需要进一步解析接收到的字符串才能获取字段值。
在我的示例中,我将JSON数据“手动”编码为字符串后发送回来。我相信有一个JSON序列化程序可以将C#对象发送过去。