jQuery ajax を実行しようとしていますが、Firfox と Chrome では動作しますが、Internet Explorer 9 では動作しません。
最終的なコードはサブドメインをまたぐ必要がありますが、これはデフォルトのトランスポートでは機能しません。
だから私は Internet Explorer で使用するカスタム トランスポートを作成しようとしています。
方法 1
$.ajaxTransport("+*", function (options, originalOptions, jqXHR) {
if (jQuery.browser.msie && window.XDomainRequest) {
var xdr;
return {
send: function (headers, completeCallback) {
// Use Microsoft XDR
xdr = new XDomainRequest();
xdr.open("get", options.url);
xdr.onload = function () {
if (this.contentType.match(/\/xml/)) {
var dom = new ActiveXObject("Microsoft.XMLDOM");
dom.async = false;
dom.loadXML(this.responseText);
completeCallback(200, "success", [dom]);
} else {
completeCallback(200, "success", [this.responseText]);
}
};
xdr.ontimeout = function () {
completeCallback(408, "error", ["The request timed out."]);
};
xdr.onerror = function () {
completeCallback(404, "error", ["The requested resource could not be found."]);
};
xdr.send();
},
abort: function () {
if (xdr) xdr.abort();
}
};
}
});
ここで最初の手法を示す簡単なサンプル ページを作成しました: http://services.whygo.net/sendAjax.htm
カスタム トランスポートを使用する場合、更新しない限り、通常のトランスポートは失敗することに注意してください。
アイデアはここから来ています: http://forum.jquery.com/topic/cross-domain-ajax-and-ie#14737000002203097
これにより、$ajax で呼び出された 'error' メソッドが失敗したときに、'error' メソッド内で 'error' 以外のエラー メッセージが表示されません。if dev ツールの [Network] タブで 405 Method not allowed が表示されますが、サーバー側のものは実行されます。
方法 2 ここで説明する別の方法も試しました: クロスサブドメイン AJAX は IE ではなく Chrome で動作します
if ('XDomainRequest' in window && window.XDomainRequest !== null) {
// override default jQuery transport
jQuery.ajaxSettings.xhr = function() {
try { return new XDomainRequest(); }
catch(e) { }
};
}
これはここにあります: http://www.whygo.net/sendAjax2.html
これについては、開発ツールの「ネットワーク」タブで実際に 200 個のコードを取得しますが、$ajax の「エラー」または「成功」パラメータを呼び出しません。
この 2 番目にタイムアウトを設定すると、「エラー」関数に「タイムアウト」のメッセージが返されます。