【问题标题】:Ajax never calls my .NET method?Ajax 从不调用我的 .NET 方法?
【发布时间】:2016-10-12 13:25:29
【问题描述】:

您好,我有以下 AJAX,它在我的 .aspx 页面中引用了一个方法。我已经进行了一些控制台调试,并且我的 data.d 始终未定义。因此,我在 .aspx 页面中引用的方法的第一行放置了一个断点,但它从未命中它。

我真的被困住了 - 所以如果有人能指出我正确的方向,那就太好了。

AJAX:

var param = { "mySearchString": str };
$.ajax({
   type: 'POST',
   url: 'myForm.aspx/myMethod',
   data: JSON.stringify(param),
   contentType: 'application/json; charset=utf-8',
   dataType: 'json',
   async: false,
   success: function (data) {
        $("#MyResults").empty();
        console.log(data);
        console.log(data.d);
        console.log(data.d.length);
        for (i = 0; i < data.d.length; i++) {
            $("#MyResults").append("<li><a href='#' onClick='SetName(this)'>" + data.d[i].title + "</" + " a>" + "</" + "li>");
        }
        if (data.d.length == 0)
        {
          $("#MyResults").empty();
        }
    }
});

我的 .NET 方法的初始设置:

[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
[WebMethod(EnableSession = true)]
public static IEnumerable<MyItem> myMethod(string searchString)
    {

我传递了正确的类型,并且在构建或运行它时没有错误。所以我有点难过!

【问题讨论】:

  • 您的服务器似乎没有返回任何内容?
  • 在我的 .NET 方法中,我调用了一个存储过程,然后我返回了结果 - 如果存储过程错误,我可以调试,但如果我有,我不知道为什么它永远不会命中的方法中的断点?我在ajax中引用方法的方式有问题吗? 'url:'myForm.aspx/myMethod''
  • var param = { "mySearchString": str };尝试将“mySearchString”更改为“searchString”,使其与 c# 方法中的名称匹配。
  • 首先确认您的 .NET 代码将任何响应返回给 AJAX 调用,并使用 data.responseText 来获取响应数据
  • 尝试使用 PostMan 或 Fiddler 并首先使用它来调试您的 .net 代码。一旦你开始着手尝试让你的 jquery 代码的 ajax 调用工作。这将帮助您将测试隔离到仅您的 .net 代码。此外,您应该共享 .net 类的其余部分,以及您对 Web 服务的任何配置。最后尝试使用简单的HttpGet 方法并调用以查看是否可以使其工作,然后逐步使用HttpPost,然后使用带参数的HttpPost。我提倡小步走,从小处着手,逐步建立,这样您就可以排除问题所在。

标签: javascript c# jquery asp.net ajax


【解决方案1】:

将此添加到您的 ajax 调用以查看有关错误的更多信息:

 error: function (request, status, error) {
                    alert('Error: ' + error);
                }

这是一个 MVC 应用程序吗? url 实际上应该是 myForm.aspx/myMethod 还是 myForm/myMethod?我的意思是你有没有在服务器端打过断点,路径是否正确?

【讨论】:

  • 不,我正在使用 web api。我在其中添加了该错误,并且得到“位置 4 的 JSON 中的意外
  • sql(我假设)是否像您期望的那样水合对象 IEnumerable?你是从你的方法返回 json 还是对象?
  • 如果我取出数据类型,我只会得到这个错误,所以我认为那个错误是指这个? stackoverflow.com/questions/36814694/…
  • 你在使用return Json语句吗?
  • like this return Json(result);
【解决方案2】:

尝试将此作为签名的一部分添加

[HttpPost]

【讨论】:

    【解决方案3】:

    您可以将以下属性添加到类中,这样就可以从 ajax 脚本调用 web 方法。

    [System.Web.Script.Services.ScriptService]
    

    【讨论】:

      【解决方案4】:

      你有

      var param = { "mySearchString": str }; 
      

      但是你方法中的参数是

      public static IEnumerable<MyItem> myMethod(string searchString)
      

      两个参数应具有相同的名称。

      【讨论】:

        【解决方案5】:

        您正在传递一个字符串作为参数,您应该传递一个具有名为 searchString 的字符串属性的对象:

        var param = { "mySearchString": str }; 
        
        $.ajax({
        
                   type: 'POST',
                   url: 'myForm.aspx/myMethod',
                   data: param,
                   contentType: 'application/json; charset=utf-8',
                   dataType: 'json',
                   async: false,
                   success: function (data) {
                         $("#MyResults").empty();
                         console.log(data);
                         console.log(data.d);
                         console.log(data.d.length);
                         for (i = 0; i < data.d.length; i++) {
                             $("#MyResults").append("<li><a href='#' onClick='SetName(this)'>" + data.d[i].title + "</" + " a>" + "</" + "li>");
                         }
        
                          if (data.d.length == 0)
                               $("#MyResults").empty();
                          }
        
                        });
        

        【讨论】:

          【解决方案6】:

          请删除以下属性,并删除JSON.stringfy

           contentType: 'application/json; charset=utf-8',
           dataType: 'json',
          

          请不要删除异步,因为如果您将其设置为 false,它会冻结您的 UI。

          你可以这样做:

          $.ajax({
             type: 'POST',
             url: 'myForm.aspx/myMethod',
             data: param, 
             success: function (data) {
                   $("#MyResults").empty();
                   console.log(data);
                   console.log(data.d);
                   console.log(data.d.length);
                   for (i = 0; i < data.d.length; i++) {
                       $("#MyResults").append("<li><a href='#' onClick='SetName(this)'>" + data.d[i].title + "</" + " a>" + "</" + "li>");
                   }
                   if (data.d.length == 0)
                   {
                      $("#MyResults").empty();
                   }             
            }
          });
          

          【讨论】:

          • 当我这样做时,它会删除我的身份验证失败消息,但它似乎返回当前 html 页面的内容?它还没有达到我的 .net 方法的断点?
          【解决方案7】:

          我在这里找到了答案:ASP.NET Calling WebMethod with jQuery AJAX "401 (Unauthorized)"

          我遇到了这个错误:

          Object {消息:Ajax 错误:“身份验证失败。”,StackTrace: 空,异常类型:“System.InvalidOperationException”}

          原来我需要这样做:

          ~/App_Start/RouteConfig.cs里面改:

          settings.AutoRedirectMode = RedirectMode.Permanent;

          收件人:

          settings.AutoRedirectMode = RedirectMode.Off;

          希望这对其他人有帮助!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-05-29
            • 1970-01-01
            • 2019-10-04
            • 2018-11-08
            • 1970-01-01
            • 1970-01-01
            • 2019-05-12
            相关资源
            最近更新 更多