我在asp.net 2.0应用程序上有一个简单的webmethod(使用1.0扩展而不是3.5 ajax扩展)。我正在尝试从jQuery调用该方法,当我这样做时,无数的例子显示在Internet上,在这里,我得到一个内部服务器错误消息返回。

这是我目前的代码:

[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);}     
});

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

我哪里错了?

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

有帮助吗?

解决方案

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

添加此功能解决了这个问题。

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

http://randomactsofcoding.blogspot的.com / 2009/03 / jQuery的JSON和 - ASMX-20-services.html

其他提示

叶氏。您应该放弃ASMX for WCF。微软自己的推荐。我想这对你的问题没有帮助,但你最好考虑一下WCF,或者至少开始考虑这项技术。

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

时,它已得到修复

[System.Web.Script.Services.ScriptService]

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top