0

我在 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);}     
});

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

我哪里错了?

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

4

3 回答 3

2

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

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

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

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

于 2009-03-03T21:03:45.107 回答
0

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

于 2009-03-03T20:28:13.587 回答
0

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

[System.Web.Script.Services.ScriptService]

于 2011-12-07T05:54:09.227 回答