jqueryからASMX Webメソッドを呼び出す際にどこが間違っていますか?
質問
asp.net 2.0アプリケーションで単純なwebmethodを使用しています(3.5 ajax拡張ではなく1.0拡張を使用)。私はjQueryからメソッドを呼び出そうとしていますが、無数の例がインターネットやここSOで示しているように呼び出すと、Internal Server Errorメッセージが返されます。
現在のコードは次のとおりです。
[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に変更し、データをクエリ文字列(name = value)に変更すると、XMLが適切に返されます。
どこがおかしいのですか?
更新: 私はjQuery v1.3.1を使用し、IE6とFirefox 3の両方でテストしています。一貫した結果が得られています。
解決
これは私の側の愚かな間違いでした。この問題は解決されました。 AJAX拡張機能への参照を含めましたが、ASMXサービスのhttphandlerをScriptHandlerFactoryクラスに書き換えるのを忘れていました。
これを追加することで問題が解決しました。
例や問題の修正方法について質問するメールを受け取ったので、このスープをナッツに変える方法についてのブログ記事を書きました。
http://randomactsofcoding.blogspot .com / 2009/03 / jquery-json-and-asmx-20-services.html
他のヒント
はい。 WCFのASMXを放棄する必要があります。マイクロソフト自身からの推奨。問題の解決には役立たないと思いますが、WCFを検討するか、少なくともそのテクノロジーを検討することをお勧めします。
同じ問題がありましたが、次をコードファイルに追加すると修正されました
[System.Web.Script.Services.ScriptService]