jquery - 如何在标准 Web 表单 .Net 中返回 JSON 对象

标签 jquery asp.net ajax json webforms

目标是调用一个方法来完成它的事情,然后返回一个 JSON 对象。

我是 JSON 新手。

我有一个default.aspx,其中包含以下代码。现在我想要 Default.aspx.cs 中的普通方法在此处的单击事件上运行。

$(".day").click(function (event) {
var day = $(event.currentTarget).attr('id');
if (day != "") {
    $.ajax(
    {
        type: "POST",
        async: true,
        url: 'Default.aspx?day=' + day,
        data: day,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            console.log("SUCCESS:" + msg);
            //  $(".stripp img").attr('src', "data:image/jpg;" + msg);
            //  $(".stripp").show();
        },
        error: function (msg) {
            console.log("error:" + msg);
        }
    });
}

});

Default.aspx.cs 看起来与此类似:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.QueryString["day"] != null)
            GetFile(Request.QueryString["day"]);
    }
    public string GetFile(string day)
    {
        string json = "";
        byte[] bytes = getByteArray();

        json = JsonConvert.SerializeObject(bytes);
        return json;
    }

我哪里出错了? 我应该以某种方式使用它还是仅适用于 Web 服务?

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]

最佳答案

我建议使用HttpHandler。没有页面生命周期(因此速度非常快)和更清晰的代码分离以及可重用性。

向您的项目添加一个“通用处理程序”类型的新项目。这将创建一个新的 .ashx 文件。任何实现IHttpHandler的类的主要方法是ProcessRequest。因此,要使用原始问题中的代码:

public void ProcessRequest (HttpContext context) {

    if(String.IsNullOrEmpty(context.Request["day"]))
    {
        context.Response.End(); 
    }

    string json = "";
    byte[] bytes = getByteArray();

    json = JsonConvert.SerializeObject(bytes);
    context.Response.ContentType = "text/json";
    context.Response.Write(json);
}

更改 AJAX 调用中的 url 即可。 JavaScript 看起来像这样,其中 GetFileHandler.ashx 是您刚刚创建的 IHttpHandler 的名称:

$.ajax(
    {
        type: "POST",
        async: true,
        url: 'Handlers/GetFileHandler.ashx',
        data: "Day=" + $.toJSON(day),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            console.log("SUCCESS:" + msg);
        },
        error: function (msg) {
            console.log("error:" + msg);
        }
    });

另一个需要考虑的小问题是,如果您需要从 Handler 代码本身访问 Session 对象,请确保继承自 IRequiresSessionState 接口(interface):

public class GetFileHandler : IHttpHandler, IRequiresSessionState

关于jquery - 如何在标准 Web 表单 .Net 中返回 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8072745/

相关文章:

jquery - 传统ajax调用我的网站的效果

javascript - 当 ActionResult 从 MVC Controller 返回时,JQuery Ajax post 不会重定向

javascript - 如果正则表达式在使用 jQuery 的 handsontable 中无效,则禁用按钮

javascript - 如何遍历数组并返回匹配值

asp.net - CreateUserWizard - 添加步骤但在所有步骤完成之前不要创建用户

asp.net - 更新查询似乎删除了备注字段

javascript - 从 AJAX 'success' 回调中使用 window.location.replace 是不好的做法吗?

javascript - 从 php 返回多个值到 jquery

PHP session 变量检索速度慢

asp.net - 良好的错误处理实践