Eri*_*der 4 asp.net ajax jquery 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>
Run Code Online (Sandbox Code Playgroud)
在Visual Studio中,我有以下与ashx文件关联的代码.当我运行它并单击按钮时,一切都按预期工作,除了我没有看到myData传递给C#代码 - 我在调试器中查看context.Request.QueryString并显示"{}".
我见过使用的例子
string stringParam = (string)Request.Form("stringParam");
Run Code Online (Sandbox Code Playgroud)
但似乎没有定义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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
*已解决首先,如果您想将一些表单参数从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#对象.
其他资源建议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); }
});
Run Code Online (Sandbox Code Playgroud)
读取服务器端的值:
string myPar = context.Request.Form["par"];
Run Code Online (Sandbox Code Playgroud)
你也可以尝试:
string json = new StreamReader(context.Request.InputStream).ReadToEnd();
Run Code Online (Sandbox Code Playgroud)
这里提到的:https://stackoverflow.com/a/8714375/139917
我马上就开始工作了。这是它最基本的形式:
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>
Run Code Online (Sandbox Code Playgroud)
背后代码:
<%@ 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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33475 次 |
| 最近记录: |