【问题标题】:AJAX request not working with ASP.Net C# - 500 server error [closed]AJAX 请求不适用于 ASP.Net C# - 500 服务器错误 [关闭]
【发布时间】:2018-02-20 11:32:39
【问题描述】:

我在我的 ASPX 页面 (ShowUsers.aspx) 中尝试了此页面方法代码,但该函数给了我一个 500 服务器错误并且没有进入 success 处理程序。

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static string GetInfo(string email)
{
    JavaScriptSerializer jss = new JavaScriptSerializer();
    User user = UserService.GetUser(email);
    return jss.Serialize(user);
}

还有 JavaScript:

$(document).ready(function() {
  $("#l").click(function() {
    $("#modalUpdate").fadeIn(1000);
    var url = "ShowUsers.aspx/GetInfo";
    var email = "davidizhakinew@gmail.com";

    $.ajax({
      url: url,
      type: "POST",
      data: "{ email : " + email + " }",
      dataType: "JSON",
      contentType: "application/JSON; charset=utf-8",
      success: function(msg) {
        alert("success");
        var data = JSON.parse(msg.d);
        // do stuff (trimmed)
      },
      error: function(msg, xhr) {
        alert(msg + ", " + xhr.responseText);
      }
    });
  });
});

有人可以帮帮我吗?

【问题讨论】:

    标签: c# jquery asp.net javascriptserializer pagemethods


    【解决方案1】:

    您的 JSON 无效,因为您没有在 JavaScript 中包含电子邮件地址字符串 inside quotes

    这将导致服务器端异常的程序证明:

    void Main()
    {
        string email = "davidizhakinew@gmail.com";
        var postback = new Postback { email = email };
    
        Console.WriteLine(new JavaScriptSerializer().Deserialize<Postback>("{ email : '" + email + "' }")); // email string escaped, ok
        Console.WriteLine(new JavaScriptSerializer().Deserialize<Postback>("{ email : " + email + " }")); // YOUR INPUT, exception Invalid JSON primitive
    }
    
    public class Postback
    {
        public string email { get; set; }
    }
    

    服务器端异常表现为内部服务器错误,代码500。您应该能够在 Windows 事件查看器中看到异常详细信息。

    所以在 JavaScript 中,只需将电子邮件地址用引号括起来:

    data: "{ email : '" + email + "' }",
    

    另请注意,您的网络方法主体只需要

    public static User GetInfo(string email) {
       return UserService.GetUser(email);
    }
    

    you do NOT need to spin up a serializer yourself。框架根据请求标头选择并启动必要的序列化程序(JSON 或 XML)。

    【讨论】:

      【解决方案2】:

      AJAX 调用返回状态码 500。这绝对是 C# 代码的错误,而不是 JavaScript。
      状态码500 表示内部服务器错误。发生任何异常时,ASP.NET 应用程序都会抛出该代码。查看 C# 端的日志/控制台输出。

      我想问题出在方法名称上。如果没有另外指定,由于 ASP.NET 命名约定,您的 GetInfo 可以使用 GET 方法调用。您使用POST 调用此端点,请尝试将其更改为GET

      另外,尝试其他 URL 组合,例如:

      • ShowUsers/GetInfo
      • ShowUsers.aspx/Info
      • ShowUsers/Info

      【讨论】:

        【解决方案3】:

        创建一个新页面并从该页面接收数据,而不是从 asp.net 中的同一页面接收数据 调用是错误的

        `"ShowUsers.aspx/GetInfo";`
        

        在新页面上试试这个

        `showUsersAjax.aspx'`
        

        并确保您的网址应该像

        var url = "http://www.doamin.com/ShowUsers.aspx/GetInfo";
        

        试试这个

        var url = "http://www.doamin.com/ShowUsers/GetInfo";
        

        假设 ShowUsers 是控制器,GetInfo 是动作 此外,在您的 API 中添加 POST 签名。

        【讨论】:

        • 相对 URL 绝对没问题,而且在许多情况下更合乎逻辑。使用它们根本没有“错误”。尽管 OP 可能应该从域的根目录开始。
        • 我的朋友确实喜欢这个,它对他很有效,我现在离他很近......
        • @DavidIzhaki 你不能在 aspx 中调用方法,但是它可以在 mvc 中完成。
        • @AayQue 我附近的朋友有一个像我这样的项目,现在正在为他工作......
        • 不,它被称为页面方法,在经典的 ASP.NET 中是完全合乎逻辑和合法的。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-19
        • 1970-01-01
        • 1970-01-01
        • 2016-08-06
        • 2016-06-11
        相关资源
        最近更新 更多