小编典典

使用asp.net的jQuery ajax无法正常工作

ajax

我将拔出所有剩余的头发,因此,如果您知道可能是什么问题,请帮助我。谢谢。我所有的谷歌搜索和搜索都没有得到回报。

首先,我正在使用jquery-1.7.2.min.js和ASP.net 2.0 Web表单。

我正在尝试使用jquery进行ajax调用,但始终收到语法错误/解析错误消息。我尝试了许多不同的方法,但是当我将dataType设置为json时,它们都会导致错误。

这是我所拥有的:

$.ajax({
    type: "POST",
    url: "UserList.aspx/GetTestJson",
    data: {}, //have also tried "{}" and other options such as removing the line
    contentType: "application/json;charset=utf-8",
    dataType: "json",
    success: function(data, textStatus, jqXHR){
        alert('success');
    },
    //Using below instead of above makes no difference either
    //success: function(data){
    //  alert('success');
    //},
    error: function(jqXHR, textStatus, errorThrown){
        alert('errorThrown: ' + errorThrown);
    }
});

和aspx页面方法:

[WebMethod]
public static string GetTestJson()
{
    return "Hello My World";
}

我也尝试过设置Web服务,但得到的结果相同。似乎返回的响应是该页面的完整html或来自Web服务的xml,并且由于我将dataType设置为json,因此无法成功解析。如果是这种情况,
如何将响应设置为仅返回json?

这是我尝试过没有运气的其他事情:

[WebMethod]
public static string GetTestJson()
{
    HttpContext.Current.Response.ContentType = "application/json";
    string json = JavaScriptConvert.SerializeObject("Hello My World");
    return json;
}

我通过jQuery得到的错误消息:

errorThrown.message = "Syntax error"
errorThrown.number = -2146827286
errorThrown.name = "SyntaxError"
textStatus = "parseerror"
jqXHR.status = 200
jqXHR.statusText = "OK"
jqXHR.readyState = 4
jqXHR.responseText = (the complete html of the page)

有什么想法或建议吗?

谢谢


阅读 280

收藏
2020-07-26

共1个答案

小编典典

感谢@DaveWard和@CodeRoller为您带来的帮助,导致了此解决方案:

  1. 安装ASP.NET Ajax扩展(HERE
  2. 添加对System.Web.Extensions.dll的引用
  3. 修改web.config以包括ScriptModule httpModule(请参见下文)

我的jQuery ajax调用和WebMethod仍然与原始帖子相同。

我的web.config已被修改如下:

  <system.web>
    <compilation debug="true">
      <assemblies>
        <!-- A bunch of other assemblies here-->
        <add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add assembly="System.Web.Extensions.Design, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      </assemblies>
    </compilation>
    <httpModules>
      <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    </httpModules>
  </system.web>

我希望其他人会觉得有用。

2020-07-26