JQueryを使用してローカルサービスへのAJAXを作成しています。私のローカルサービスはHttpHandler(Request.ashxなど)です。Request.ashx内では、外部Webサイト(CallExternalWebsite()など)を呼び出す責任があります。CallExternalWebsite()は、.NETのSystem.Net.WebRequest()を使用してリクエストを開始します。外部Webサイトにアクセスすると、成功イベントもエラーイベントも発生しません。(注:IISでホストされているWCFサービスも試しました。同じ結果が表示されます)
次に2つのシナリオを示します。
このシナリオは機能します:
- ProcessRequest()で、callExternalWebsite()をコメントアウトします。
- オブジェクトoの場合、結果をシミュレートするためにデータで初期化します。
- myButtonをクリックします
- 成功イベントはクライアントで発生します。
- Fiddlerでは、ヘッダー情報を確認できます。Jsonの結果などが表示されます。
このシナリオは機能しません。
- ProcessRequest()で、callExternalWebsite()の呼び出しを有効にします。
- オブジェクトoの場合、callExternalWebsite()は適切なオブジェクトを返します。
- myButtonをクリックします
- 成功イベントはクライアントでは発生しません。
- Fiddlerでは、ヘッダー情報を確認できます。Jsonの結果などが表示されます。
- callExternalWebsite()が機能しているのは、電話に結果を送信しているからです。
要約すると、HttpHandler内の外部http呼び出しがAjax成功イベントに影響を与えています。
これがAJAX呼び出しからのスニペットです:(私はさまざまな相互作用を試みていました)
$(document).ready(function () {
$("#myButton").click(function (event) {
$.ajax({
cache: false,
type: "POST",
url: "http://localhost/Service/Request.ashx",
data: '{"id" : "053252f3"}',
contentType: "application/json; charset=utf-8",
dataType: "json",
timeout: 20000,
success: function (msg) {
AjaxSucceeded(msg);
},
error: AjaxFailed
});
});
});
HttpHandler Request.ashxで、
public Void ProcessRequest(httpContent context)
{
// Do some stuff....
// Make call to external web site
object o = callExternalWebsite (Uri, Data, "POST");
// Return results from callOtherWebsite
JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
string json = javaScriptSerializer.Serialize(o);
context.Response.ContentType = "application/json";
context.Response.Write(json);
}
何かご意見は?
ありがとう。
スティーブ