Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过HttpHandler使用ajax获取数据_C#_Ajax_Json_Httphandler - Fatal编程技术网

C# 通过HttpHandler使用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) { $.

所以我正在用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>
有人能帮我弄清楚为什么我在这里什么都没有得到吗?我完全准备好了我可能做错了

我根据上的文章编写了代码

编辑
发现我在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>