为什么 jquery ajax 方法只能调用 WebMethod

本文关键字:调用 WebMethod 方法 jquery ajax 为什么 | 更新日期: 2023-09-27 18:34:30

在使用jQuery Ajax方法时,我知道该方法只能调用webmethod或get/post of mvc。为什么我不能使用 ajax 方法调用普通函数?

例:

$.ajax({
    type: "POST",
    url: "CS.aspx/GetCurrentTime",
    data: '{name: "' + $("#<%=txtUserName.ClientID%>")[0].value + '" }',
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: OnSuccess,
    failure: function(response) {
        alert(response.d);
    }
});

假设,我正在调用CS.aspx页面的方法GetCurrentTime((,那么我需要用属性WebMethod装饰GetCurrentTime((,以便从ajax方法进行调用。

为什么 jquery ajax 方法只能调用 WebMethod

你得到的是预期的行为。这个问题与jQuery无关,而是与服务器端代码有关。

您通常通过其 URL 请求资源以获取该资源。

CS.aspx是指向该页面的 URL。

使用CS.aspx/GetCurrentTime实际上是一个不同的URL,要求不同的资源。

这就是WebMethodAttribute的用武之地。它告诉 ASP.NET 可以通过 URL CS.aspx/GetCurrentTime获得新资源,这样 ASP.NET 运行时就知道在对该 URL 发出请求时该怎么做。

作为旁注:ASP.NET MVC在其URL中不使用.aspx(至少默认情况下不是(。最好检查您的设置并理清您的事情。

编辑:如果你使用MVC,你将在一个控制器(而不是页面(中,你将编写操作(而不是方法(。在这种情况下,不需要 WebMethodAttribute,因为默认情况下,所有公共操作都可以通过 RouteConfig 中配置的 URL 使用。

默认路由如下:

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

希望这有助于解决您的问题。