所以我正在努力用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) {
$.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>
我已记录data
以检查其值。由于这是我第一次尝试,我不确定会发生什么,但是,我相信我应该回到名称:价值对。目前控制台绝对没有任何记录。没有任何价值。
这是我的HttpHandler:
public void ProcessRequest(HttpContext context)
{
string mailid = context.Request.QueryString["mid"].ToString();
context.Response.ContentType = "text/json";
context.Response.Write(showMailDetail(mailid));
}
protected string showMailDetail(string id)
{
int mailid = int.Parse(id);
string From = "";
DateTime Date = DateTime.Now;
string Subject = "";
string Message = "";
MySqlContext db = new MySqlContext();
string sql = "select m.datesent, m.subject, m.message, u.firstname, u.lastname from mail m inner join users u on m.sender = u.userid where m.mailid = @id";
List<MySqlParameter> args = new List<MySqlParameter>();
args.Add(new MySqlParameter() { ParameterName = "@id", MySqlDbType = MySqlDbType.Int32, Value = mailid });
MySqlDataReader dr = db.getReader(sql, args);
if (dr.HasRows)
{
dr.Read();
From = (string)dr["firstname"] + " " + (string)dr["lastname"];
Date = dr.GetDateTime("datesent");
Subject = (string)dr["subject"];
Message = (string)dr["message"];
}
dr.Close();
string result = "{ 'From' : " + From + ", 'Date' : " + Date.ToString("yyyy/MM/dd HH:mm:ss") + ", 'Subject' : " + Subject + ", 'Message' : " + Message + " }";
return result;
}
任何人都可以帮我弄清楚为什么我在这里没有得到任何东西?我已经完全准备好了我做错了......
我根据文章编写了代码 http://www.codeproject.com/Articles/170882/jQuery-AJAX-and-HttpHandlers-in-ASP-NET
修改
发现我在我的SQL中使用了不正确的列名 - 应该是m.sender
而不是m.senderid
...但是,我现在有另一个问题。
当我触发处理程序时,我在Chrome控制台中获得以下内容:
获取GetMail.ashx?mid = 1 500(内部服务器错误)jquery.min.js:2
编辑2
更正了处理程序代码中的更多错误,现在任何地方都没有出现错误,但看起来点击实际上并没有触发任何内容......
不确定如何继续...
答案 0 :(得分:8)
哇,永远不要通过使用字符串连接来手动构建JSON,你永远不会做对。
使用JSON时始终使用serializer:
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>