私のAjaxクロスドメインリクエストは、IE9で「アクセスが拒否されました」で失敗します。私はこのトピックに関するいくつかの投稿を読みました、そしてそれがうまくいくはずです。
- IE9およびjQuery1.8.1
- 呼び出しは
async
、、、jsonp
はcrossdomain
です。これらは私が見つけた前提条件です。cache
false
- 最新のFirefoxとChromeで動作します。
jQuery.support.cors
本当です- 応答ヘッダーも設定されています:
Access-Control-Allow-Origin:*
(SO) - 返されたJSONコードも正しく、チェッカーを使用しています(3も参照)。
では、なぜこれがAccessの拒否で失敗するのでしょうか?何か案が?私のコードが<script></script>
ページ上のタグではなく、「JavaScript」ライブラリ内から呼び出されたことが原因でしょうか?
私は何が欠けていますか?
// The code is part of an object's method (prototype)
// code resides in a library "Mylib.js"
$.ajax({
type: 'GET',
url: url,
cache: false,
async: true,
crossdomain: true, // typo, crossDomain, see my answer below
datatype: "jsonp", // dataType
success: function (data, status) {
if (status == "success" && !Object.isNullOrUndefined(data)) { ... }
},
error: function (xhr, textStatus, errorThrown) {
// access denied
}
});
-編集-Robotsushiのコメントに基づいて、いくつかのさらなる調査---
- 確かに
XDomainRequest
、jQueryソースコード(1.8.1)で見つけることができません - cors(
jQuery.support.cors = true
)を設定しないと、「トランスポートなし」の例外が発生します。 - なぜ他の人がIE9クロスドメインリクエストで明らかに成功するのか疑問に思っています。例:jQueryクロスドメインAjaxJSONP呼び出しが一部のIEバージョンで不明な理由でランダムに失敗する
jQueryがこれを処理する方法は、以下のコードの周りにあるようですが、これは私の特定のケースでは呼び出されません。理由はわかりません。
//スクリプトタグハックトランスポートをバインドしますjQuery.ajaxTransport( "script"、function(s){
// This transport only deals with cross domain requests if ( s.crossDomain ) {
2010年の同様の状況:Jquery $ .ajaxはクロスドメイン呼び出しでIEで失敗します。ただし、これは後のjQueryバージョンで解決されているはずです。