Ajax从不调用我的.NET方法?

时间:2016-10-12 13:25:30

标签: javascript c# jquery asp.net ajax

您好我有以下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)
    {

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

7 个答案:

答案 0 :(得分:1)

尝试将此添加为签名

的一部分
[HttpPost]

答案 1 :(得分:1)

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

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

这是一个MVC应用程序吗?该url实际上应该是myForm.aspx / myMethod还是myForm / myMethod?我得到的是你在服务器端遇到断点并且路径正确吗?

答案 2 :(得分:0)

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

[System.Web.Script.Services.ScriptService]

答案 3 :(得分:0)

你有

var param = { "mySearchString": str }; 

但是Method中的参数是

public static IEnumerable<MyItem> myMethod(string searchString)

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

答案 4 :(得分:0)

您将字符串作为参数传递,您应该传递一个名为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();
                  }

                });

答案 5 :(得分:0)

请删除以下属性,然后移除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();
         }             
  }
});

答案 6 :(得分:0)

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

我遇到了这个错误:

  

Object {Message:Ajax error:“Authentication failed。”,StackTrace:   null,ExceptionType:“System.InvalidOperationException”}

原来我需要这样做:

内部~/App_Start/RouteConfig.cs更改:

settings.AutoRedirectMode = RedirectMode.Permanent;

要:

settings.AutoRedirectMode = RedirectMode.Off;

希望这会帮助别人!