【问题标题】:Where am I going wrong in calling ASMX web methods from jquery?从 jquery 调用 ASMX Web 方法我哪里出错了?
【发布时间】:2011-12-07 13:54:09
【问题描述】:

我在 asp.net 2.0 应用程序上有一个简单的 webmethod(使用 1.0 扩展而不是 3.5 ajax 扩展)。我正在尝试从 jQuery 调用该方法,当我按照 Internet 和 SO 上显示的无数示例执行此操作时,我收到返回的内部服务器错误消息。

这是我当前的代码:

[WebMethod]
[ScriptMethod(ResponseFormat=ResponseFormat.Json)]
public string Select(string login)
{
    UserProfile profile = UserProfile.GetUserProfile(login);

    return "{ FirstName: '" + profile.FirstName + "', " +
             "LastName: '" + profile.LastName + "', " +
             "EmailAddress: '" + profile.EmailAddress + "', " +
             "PhoneNumber: '" + profile.PhoneNumber + "' }";
 }

现在是 jquery:

$.ajax({
    type: "POST",
    url: "Services/ProfileService.asmx/Select",
    dataType: "json",
    data: "{'login':'DOMAIN%5CUSER1'}",
    contentType: "application/json; charset=utf-8",
    success: function(msg){ alert(msg); },
    error: function(xhr){ alert(xhr.statusText);}     
});

Web 服务也使用[ScriptService] 属性进行修饰。如果我注释掉 contentType,将 dataType 更改为 text,并将 data 更改为查询字符串 (name=value),我会正确返回 XML。

我哪里出错了?

更新: 我正在使用 jQuery v1.3.1 并在 IE6 和 Firefox 3 中进行测试。我得到了一致的结果。

【问题讨论】:

  • 我看不出任何问题。您确定问题出在 JSON 基础架构上吗?您是否尝试过传递一个简单的字符串作为登录名并注释掉 Select 函数中的行?
  • @LeJeune 我试图评论整个网络方法的内容并返回“测试”。我仍然收到返回的内部服务器错误。它也没有达到断点。我也删除了 [ScriptMethod] 属性进行测试,没有任何变化。

标签: jquery ajax asmx


【解决方案1】:

这对我来说是一个愚蠢的错误。问题已解决。虽然我包含了对 AJAX 扩展的引用,但我忘记将 ASMX 服务的 httphandler 重写为 ScriptHandlerFactory 类。

添加这个解决了这个问题。

由于我收到了一些询问示例或如何解决问题的电子邮件,因此我写了一篇博客文章,介绍如何将这汤变成坚果。

http://randomactsofcoding.blogspot.com/2009/03/jquery-json-and-asmx-20-services.html

【讨论】:

  • 谢谢,您的博文帮助我为我的项目工作!
【解决方案2】:

是的。您应该为 WCF 放弃 ASMX。来自微软自己的推荐。我想它不会帮助您解决问题,但您最好考虑 WCF 或至少开始研究该技术。

【讨论】:

  • 感谢您的反馈,我通常会,除了该项目需要核心 2.0 框架并且不需要任何高于该框架的任何东西,因此没有 WCF。相信我,我想要 WCF,但目前这个决定不在我的掌控之中。
  • 微软推荐 WCF 而不是 asmx 用于 web ???考虑到 WCF 对多个主机标头的限制,这很奇怪。
  • 我不认为 System.Web.Script 在 2.0 框架中可用。
  • @hromanko System.Web.Script 命名空间可通过用于 Asp.net 2.0 应用程序的 ASP.Net AJAX Extensions v1.0 包获得。
【解决方案3】:

我遇到了同样的问题,但是当我将以下内容添加到代码文件时它已得到修复

[System.Web.Script.Services.ScriptService]

【讨论】:

    猜你喜欢
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 2015-08-19
    • 2016-08-02
    相关资源
    最近更新 更多