C# 通过HttpHandler使用ajax获取数据
所以我正在用AJAX获取一些数据。看起来一切正常,但我并没有在我的页面上获取数据:C# 通过HttpHandler使用ajax获取数据,c#,ajax,json,httphandler,C#,Ajax,Json,Httphandler,所以我正在用AJAX获取一些数据。看起来一切正常,但我并没有在我的页面上获取数据: <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> <script type="text/javascript"> function getMailDetail(mailId) { $.
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript">
function getMailDetail(mailId) {
$.ajax({
type: "GET",
url: "GetMail.ashx",
data: "mid=" + mailId,
success: function (data) {
console.log(data);
var pnlMail = $('#<%= pnlMail.ClientID %>');
var lblFrom = $('#<%= lblFrom.ClientID %>');
var lblDate = $('#<%= lblDate.ClientID %>');
var lblSubject = $('#<%= lblSubject.ClientID %>');
var lblMessage = $('#<%= lblMessage.ClientID %>');
lblFrom.text(data.From);
lblDate.text(data.Date);
lblSubject.text(data.Subject);
lblMessage.text(data.Message);
pnlMail.css("display", "block");
}
});
}
</script>
有人能帮我弄清楚为什么我在这里什么都没有得到吗?我完全准备好了我可能做错了
我根据上的文章编写了代码
编辑发现我在sql中使用了不正确的列名-应该是
m.sender
而不是m.senderid
。。。然而,我现在有另一个问题
当我触发处理程序时,我在Chrome的控制台中得到以下信息:
GET GetMail.ashx?mid=1500(内部服务器错误)jquery.min.js:2
编辑2修正了处理程序中代码中的更多错误,现在任何地方都没有出现错误,但看起来点击实际上并没有触发任何东西
不知道如何在这里继续…哇,永远不要使用字符串连接来手动构建JSON,你永远都不会成功 使用JSON时,请始终使用:
public void ProcessRequest(HttpContext context)
{
int mailid = int.Parse(context.Request["mid"]);
var detail = GetMailDetail(mailid);
if (detail != null)
{
context.Response.ContentType = "application/json";
string json = new JavaScriptSerializer().Serialize(detail);
context.Response.Write(json);
}
else
{
context.Response.StatusCode = 404;
}
}
protected object GetMailDetail(int mailid)
{
string sql = "select m.datesent, m.subject, m.message, u.firstname, u.lastname from mail m inner join users u on m.senderid = u.userid where m.mailid = @id";
var args = new[]
{
new MySqlParameter
{
ParameterName = "@id",
MySqlDbType = MySqlDbType.Int32,
Value = mailid
}
}.ToList();
MySqlContext db = new MySqlContext();
using (MySqlDataReader dr = db.getReader(sql, args))
{
if (dr.Read())
{
return new
{
From = string.Format("{0} {1}", dr["firstname"], dr["lastname"]),
Date = dr.GetDateTime("datesent").ToString("yyyy/MM/dd HH:mm:ss"),
Subject = dr["subject"],
Message = dr["message"]
}
}
return null;
}
}
现在让我们看看客户端调用。您似乎已经定义了一些getMailDetail
函数,但似乎并没有在任何地方调用它,或者至少还没有显示它
下面是一个完整的示例:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript">
function getMailDetail(mailId) {
$.ajax({
type: 'GET',
url: '<%= ResolveUrl("~/GetMail.ashx") %>',
data: { mid: mailId },
success: function (data) {
console.log(data);
}
});
}
</script>
<div onclick="getMailDetail(5);">Click to get mail detail</div>
函数getMailDetail(mailId){
$.ajax({
键入:“GET”,
url:“”,
数据:{mid:mailId},
成功:功能(数据){
控制台日志(数据);
}
});
}
单击以获取邮件详细信息
你试过调试处理程序的代码吗?嗯,是的,我试过了,并修复了我发现的坏代码。。。现在代码运行得很好,但什么也没发生,结果值中缺少了曲线括号。JSON格式已更正为“{'property':value}”,但没有任何改进。。。我相应地更新了代码第一次使用时遇到了问题'UserMail.MySqlContext':using语句中使用的类型必须隐式转换为'System.IDisposable'
此外,在我写入RowDataBoundOK上GridView行的click事件中调用getMailDetail函数,因此请删除数据上下文中的using语句。我已经更新了我的答案。太棒了:)现在只需将值正确写入页面即可。如果“mid”的值作为字符串或其他东西传递,那么会发生什么。。?它将抛出异常,对吗?我正在寻找一种方法来验证它们。。
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript">
function getMailDetail(mailId) {
$.ajax({
type: 'GET',
url: '<%= ResolveUrl("~/GetMail.ashx") %>',
data: { mid: mailId },
success: function (data) {
console.log(data);
}
});
}
</script>
<div onclick="getMailDetail(5);">Click to get mail detail</div>