【问题标题】:jQuery ajax cannot call WebMethodjQuery ajax 无法调用 WebMethod
【发布时间】:2013-06-25 14:15:36
【问题描述】:

我的问题似乎有非常简单的解决方案,在搜索 SO 和谷歌搜索后我找不到它。

我有一个位于 UrlUpdatePage.aspx 中的客户端脚本。它定期调用从 aspx 获取 json 以获取操作的当前状态并向用户显示消息。下面是ajax调用:

  var listenForStatusChanges = function () {
      $.ajax({
        type: 'GET',
        url: "/UrlUpdatePage.aspx/GetRunningState",
        data: "{}",
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',

        success: function (data) {
          alert(data.IsRunning);
        }
      });
    };

在代码隐藏文件 UrlUpdatePage.cs 我有这样的方法

[WebMethod]
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
public static string GetRunningState()
{
    ...
    return jsonObj;
}

问题是当进行 ajax 调用时,GetRunningStatemethod 不会在调试模式下触发,success 回调也不会触发。此外,当我在 Firebug 中查看请求的详细信息时,发出了请求,但从响应选项卡中我可以看到调用返回 html 标记,而不是 json 数据。

如何将GetRunningState 方法暴露给客户端并从服务器获取json?我使用 .NET 4

【问题讨论】:

  • 将您获得的响应以 html 格式复制到记事本中,将其保存为 html 文件,然后打开它。瞧!这是你的错误。下一张在此处发布屏幕截图。
  • @passionateCoder 我无法上传屏幕截图,但没有任何意义:响应仅显示此页面的标记。

标签: asp.net ajax jquery webmethod


【解决方案1】:

我知道为什么我得到的是 html 标记而不是 json:due to security reasons UrlUpdatePage.aspx/GetRunningState 只能通过 HTTP POST 请求调用。 所以,我需要在两个地方使用 POST 动词:type: 'POST'UseHttpGet = false

谢谢大家的帮助!

【讨论】:

  • 我承认它在测试项目中与GET 一起工作,但在我提到的项目中却没有:( 所以解决方案可能在 Web.config 但我不知道在哪里
【解决方案2】:

尝试从 URL 中删除第一个斜杠。像这样:

url: "UrlUpdatePage.aspx/GetRunningState",

【讨论】:

  • 尝试删除scripmethod注解。我做了很多次,它开箱即用成功,只需设置webmethod 注释。不要忘记编译服务器端代码;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-10
  • 2011-12-07
相关资源
最近更新 更多