別のサーバーからいくつかの安らかなサービスを消費するために Ajax を介して通信しているアプリケーションに問題があります。
問題はIEだけで発生し、消費するアプリケーションがsslを備えたサーバーにある場合、つまり、他のボックスから同じサーバーから同じサービスを消費すると、すべて正常に動作します。
SSLを備えたサーバー( https://api.restbla/.. )にRestfulサービスがあり、他のサーバーからこれらを消費する必要があります(ssl証明書の有無にかかわらず)
Internet Explorer でテストすると、次の結果が得られます。
- ローカル作品からサービスを利用する場合
- 同じボックス(残りがホストされている場所)からサービスを消費すると機能します
- SSLが機能せずに別のサーバーからサービスを利用した場合
- しかし、https 上のサーバーからサービスを利用すると、IE では機能しません。
以前のテストはすべて、Chrome と FF で動作します
これは、ajax 呼び出しを行うために使用する JavaScript です。
function load(_url, _callback, _params, _type, _htmlMethod, _onStartFunction, _onFinishFunction) {
var xhr;
if (isFunction(_onStartFunction)) { _onStartFunction(); }
ieVersion = getInternetExplorerVersion();
if (typeof XMLHttpRequest !== 'undefined') {
console.log("XMLHttpRequest");
xhr = new XMLHttpRequest();
}else {
if (ieVersion > 7){
console.log("XDomainRequest");
xhr = new XDomainRequest();
}else{
var versions = [ "MSXML2.XmlHttp.5.0", "MSXML2.XmlHttp.4.0", "MSXML2.XmlHttp.3.0", "MSXML2.XmlHttp.2.0", "Microsoft.XmlHttp" ];
for ( var i = 0, len = versions.length; i < len; i++) {
try {
console.log("ActiveXObject: " + versions[i]);
xhr = new ActiveXObject(versions[i]);
break;
} catch (e) { /* attempt next one*/ }
}
}
}
xhr.onreadystatechange = ensureReadiness;
if (_type == JSON_TYPE) {
contentType = "application/json";
}else{
contentType = 'text/plain';
}
function ensureReadiness() {
if (xhr.readyState < 4) { return; }
if (xhr.status !== 200) {
showServiceDown();
if (isFunction(_onFinishFunction)) { _onFinishFunction();}
return;
}
if (xhr.readyState === 4) {
if (isFunction(_onFinishFunction)) {_onFinishFunction(); }
var responseText = "";
responseText = xhr.responseText;
if (_type == JSON_TYPE) {
_callback(responseText);
} else if (_type = HTML_TYPE) {
var replaced = responseText.replace(/\\/g, '///');
_callback(replaced);
} else { _callback(responseText); }
}
}
if ((_htmlMethod == undefined) || (_htmlMethod == null) || (_htmlMethod == "")) {
_htmlMethod = METHOD_POST;
}
xhr.open(_htmlMethod, _url, true);
xhr.withCredentials = true;
xhr.setRequestHeader("Content-type", contentType);
_params = (_params != undefined) ? _params : null;
xhr.send(_params);
}
このプロジェクトには JavaScript フレームワークを使用できません。
証明書は社内でのみ使用されるため、ブラウザの検証メールは失敗します。これが問題と関係があるかどうかはわかりません。
誰かがこの問題の解決策を持っていることを願っています。
お時間をいただきありがとうございます。