Jquery 如何在标准web窗体.Net中返回JSON对象

Jquery 如何在标准web窗体.Net中返回JSON对象,jquery,asp.net,ajax,json,webforms,Jquery,Asp.net,Ajax,Json,Webforms,目标是调用一个方法,该方法完成它的任务,然后返回一个JSON对象 我是JSON新手 我有一个default.aspx,其中包含以下代码。现在我希望Default.aspx.cs中的一个普通方法在这里的click事件上运行 $(".day").click(function (event) { var day = $(event.currentTarget).attr('id'); if (day != "") { $.ajax( { type: "POST",

目标是调用一个方法,该方法完成它的任务,然后返回一个JSON对象

我是JSON新手

我有一个default.aspx,其中包含以下代码。现在我希望Default.aspx.cs中的一个普通方法在这里的click事件上运行

$(".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)]

自从我使用webforms已经有一段时间了,但是如果你没记错的话,如果你把webmethod属性放在GetFile方法上,并使该方法成为静态的,它应该可以工作

 [WebMethod]
 public static string GetFile(string day)

此外,在ajax方法中发布数据的方式也有点不恰当。从url中删除querystring day,数据应为json格式,类似于{“day”:day}

是的,您的方法必须是静态的,带有WebMethod属性

基本示例:

CS

Javascript

<script>
    $.ajax({
      type: "POST",
      url: "Default.aspx/HelloWorld",
      data: "{}",
      contentType: "application/json",
      dataType: "json",
      success: function(msg) {
        console.log(msg.d);
      }
    });
</script>

$.ajax({
类型:“POST”,
url:“Default.aspx/HelloWorld”,
数据:“{}”,
contentType:“应用程序/json”,
数据类型:“json”,
成功:功能(msg){
控制台日志(msg.d);
}
});

我建议使用
HttpHandler
。没有页面生命周期(因此非常快速),代码分离更加清晰,并且具有可重用性

向项目中添加类型为“Generic Handler”的新项。这将创建一个新的.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);
        }
    });

另一个要考虑的小问题,如果您需要从处理程序代码本身访问会话对象,请确保从IrrestReSession状态> /Cult>接口继承:

public class GetFileHandler : IHttpHandler, IRequiresSessionState

好的,我喜欢这个方法,但是Ajax调用中的URL应该是什么?我得到:405 method Not allowed您发送请求的确切URL是什么?我这样问是因为一些谷歌用户提出了这个问题:只有当您使用Microsoft Internet Information Services(IIS)4.0和Microsoft Internet Information Services 5.0时,才会出现这个问题。如果向运行IIS 4.0或IIS 5.0的服务器发送POST请求,并且POST请求包含以斜杠(/)结尾的URL,则会出现此问题。IIS返回405错误消息,而不是默认文档。但是,如果谓词属性的方法值为GET或HEAD,IIS将返回默认文档。JSON文本的MIME媒体类型为
application/JSON
。默认编码是UTF-8。(来源:RFC4627)d从何而来?
public class GetFileHandler : IHttpHandler, IRequiresSessionState