AJAX请求无法使用ASP.Net C# - 500服务器错误

时间:2018-02-20 11:32:40

标签: c# jquery asp.net javascriptserializer pagemethods

我在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);
      }
    });
  });
});
是的,有人能帮帮我吗?

3 个答案:

答案 0 :(得分:1)

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

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

另外,请尝试其他网址组合,例如:

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

答案 1 :(得分:0)

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

是错误的
package main

import (
    "fmt"
    "./pokemons"
    "./pokeTrainers"
)

func main() {
    fmt.Printf("ERROR CIRCULAR IMPORT")

尝试使用新页面

`"ShowUsers.aspx/GetInfo";`

并确保您的网址应该像

`showUsersAjax.aspx'`

试试这个

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

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

答案 2 :(得分:0)

由于您未在JavaScript中附上电子邮件地址字符串inside quotes,因此您的JSON无效。

编程证明这会导致服务器端异常:

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 + "' }",

另请注意,您的Web方法正文所需的只是

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

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