jquery から呼び出すことができる単純な WCF REST サービスをセットアップしようとしています。ブラウザでその URL にアクセスすると、応答が返ってきます。(Firefox プラグイン RESTClient を使用して) HTTPRequest を直接送信しようとすると、応答が返されます。これらの応答は、ヘッダーと JSON の文字列を含み、他には何も含まれていないように見えます。
ただし、jquery.get() または jquery.post() 呼び出しを介してこの同じサービスを呼び出すと、何も起こりません。jquery.ajax() 呼び出しを使用すると、エラー コールバックが呼び出されることがわかりますが、エラー コールバックに渡されたデータから、これが機能しない理由の手がかりが得られません。
<a id="thelink" href="javascript:void(0)">GO</a>
<script type="text/javascript">
function doAjax() {
$.ajax({type: "POST",
dataType: "json", // see note below
url: "http://localhost:54459/MySimpleService.svc/json/24",
success: function(jqXHR, textStatus) {
alert("success");
},
error: function(jqXHR, textStatus, errorThrown) {
alert("error");
}
});
}
$('#thelink').click(doAjax);
</script>
注:dataTypeパラメーターについては、「text」、「json」、「jsonp」のすべてを試し、パラメーターをオフのままにしました。同様に、GET と POST の両方を試しました (それぞれ GET または POST に応答するように Web サービスを変更します)。
そのエンドポイントで呼び出されたメソッドは、失敗するはずの素晴らしいことは何もしません-文字列を定数に連結して返すだけです(この時点でテストしているだけで、将来もっと興味深いことを明らかにするでしょう)
リンクをクリックすると、Firefox で 200 OK が表示されます。
Visual Studio 2010 デバッグ環境で WCF サービスが実行されています。このサービス メソッドに応答するメソッドに配置されたブレークポイントにヒットします。
ローカル マシン (ポート 80) 上のファイルから上記の html にアクセスし、別の場所でホストしようとしましたが、結果は同じでした。これはセキュリティ上の問題でしょうか?
エラー コールバックに渡される値はあまり役に立ちません。
- jqXHR - readyState: 0、ステータス: 0、statusText: エラー
- textStatus - 「エラー」
- errorThrow - ""
では、ブラウザまたは RESTClient で URL を呼び出すと、GET または POST でサービスが機能しているように見えるのに、jquery.ajax() から呼び出そうとすると失敗するのはなぜですか?
編集:受け取ったコメントに基づいてさらにテストした後、Web サービスと同じポートで JavaScript を使用してページをホストしようとしましたが、これは成功を示しています。私の現実のシナリオでは、クライアント側のコードと Web サービスを同じドメイン/ポートでホストする余裕はありません。これはセキュリティ モデルの問題であると想定しています。この種のアクセスを許可するにはどこを見ればよいでしょうか (ドメイン/ポートのホワイトリスト登録など)。