You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AJAX调用WebMethod无法正确返回字符串问题求助

解决AJAX调用WebMethod返回完整HTML且触发error回调的问题

你遇到的这个情况在ASP.NET WebForm里挺常见的——明明请求状态码是200 OK,但拿到的不是预期的JSON字符串,反而返回了整个页面的HTML,还触发了error回调。咱们一步步拆解问题,逐个解决:

1. 先搞定最容易踩坑的URL路径问题

你的AJAX里用了$(location).attr('href') + "/GetYard",这会导致URL重复拼接页面名称!比如当前页面是YardPage.aspx,location.href已经是http://yourdomain/YardPage.aspx,再拼上/GetYard就变成了http://yourdomain/YardPage.aspx/GetYard?不对,是http://yourdomain/YardPage.aspx/YardPage.aspx/GetYard——服务器找不到这个路径,就会返回整个页面的HTML当“默认响应”。

修复方案:
直接用相对路径,或者借助服务器端解析确保路径正确:

  • 如果WebMethod就在当前页面里,直接写url: "GetYard"
  • 更稳妥的写法是用ASPX的服务器端解析:url: '<%= ResolveUrl("~/YardPage.aspx/GetYard") %>'(把YardPage.aspx换成你的页面名称)

2. 检查WebMethod的配置细节

虽然你已经加了jsonSerialization的配置,但还有几个点要确认:

  • 你已经把WebMethod设为Public Shared(VB.NET要求WebMethod必须是静态/共享方法),这个没问题,但别手动写Response.Write这类代码——WebMethod会自动帮你把返回值序列化为JSON,手动输出会破坏JSON结构。
  • 确保web.config里允许GET请求访问WebMethod(默认是允许的,但如果被配置禁用了就会出问题),可以加上这段配置:
<configuration>
  <system.web>
    <webServices>
      <protocols>
        <add name="HttpGet"/>
        <add name="HttpPost"/>
      </protocols>
    </webServices>
  </system.web>
</configuration>

3. 调整AJAX请求的细节

  • GET请求不需要设置contentType(因为GET没有请求体),可以去掉这个配置项
  • error回调里的参数是jqXHR对象,不是返回的响应数据,别用response.d,改成xhr.responseText能帮你看到真实的返回内容,方便排查:
error: function(xhr, status, error) {
  console.log("错误信息:", error);
  console.log("服务器返回内容:", xhr.responseText);
}
  • 成功回调里要注意,WebMethod返回的内容会被包装在response.d里(ASP.NET的AJAX特性),所以要取response.d才能拿到你的"TEST"字符串。

修正后的完整代码示例

AJAX代码:

$(function () {
  $.ajax({
    type: 'GET',
    url: '<%= ResolveUrl("~/YardPage.aspx/GetYard") %>', // 替换成你的页面路径
    dataType: "json",
    success: function(response) {
      console.log("返回结果:", response.d);
      alert(response.d);
    },
    error: function(xhr, status, error) {
      console.log("请求出错:", status, error);
      console.log("返回内容:", xhr.responseText);
    }
  });
});

VB.NET WebMethod代码:

<WebMethod>
Public Shared Function GetYard() As String
    Return "TEST"
End Function

最后排查小技巧

打开浏览器开发者工具(F12),切换到Network标签,发起请求后:

  1. 查看请求的URL是否正确
  2. 查看Response标签里的内容,确认是JSON还是HTML
  3. 如果还是返回HTML,检查全局错误处理(比如Global.asax里的Application_Error)是否把错误重定向到了某个页面,导致返回HTML

内容的提问来源于stack exchange,提问作者mattz330

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:05:37