6

我要拔掉我剩下的头发,所以如果你知道问题可能是什么,请帮助我......谢谢。我所有的谷歌搜索也没有得到回报。

首先,我使用 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)

有什么想法或建议吗?

谢谢

4

2 回答 2

12

感谢@DaveWard 和@CodeRoller 的帮助,导致了这个解决方案:

  1. 安装 ASP.NET Ajax 扩展(这里
  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>

我希望其他人会发现这很有用。

于 2012-08-01T22:56:07.120 回答
-1

你应该在里面调用一个函数PageLoad Function

If(!Page.IsPostback){
   ...
}
于 2019-04-13T18:47:45.177 回答