我需要使用jQuery AJAX发送跨域请求。但它在IE9中无效。
奇怪的是,当我在一个独立的HTML文件中尝试它时,它工作正常。但是在CQ页面中完成时会中断。
js代码如下:
$.support.cors = true;
$.ajax({
cache: false,
url: "https://www.some.external.web.service",
dataType: "json",
contentType: "application/json; charset=utf-8",
type: "POST",
crossDomain: true,
data: "{"key":"value"}",
processData: false,
success: function (response) { alert("success"); },
error: function (xhr, status, error) { alert("AJAX Error:status: "+ status+ "\nerror: " + error + "\nxhr.status: " + xhr.status + "\nResponseText: \n" + xhr.responseText); }
});
我尝试使用数据类型作为'jsonp',但仍无济于事。在IE9中,它永远不会返回'Success'处理程序并始终转到'error'处理程序。
显示的错误是“传输错误”。
网络服务是https,我的网页可以是http(作者)或http(发布)
我已经在ajax之前设置了$.support.cors = true;
。我错过了什么?
答案 0 :(得分:0)
由于GET和文本内容的原因,我无法使用JSONP或XDR。
为此,我在我的页面中添加了一个iframe,其HTML位于客户端的服务器中。因此,我们将数据发布到iframe,iframe然后将其发布到网络服务。因此,消除了跨域引用。
我们添加了双向来源检查,以确认只有授权页面向iframe发送数据和从iframe发布数据。
<iframe style="display:none;" id='receiver' name="receiver" src="https://iframe-address-at-client-server">
</iframe>
//send data to iframe
var hiddenFrame = document.getElementById('receiver').contentWindow;
hiddenFrame.postMessage(JSON.stringify(message), 'https://client-server-url');
//The iframe receives the data using the code:
window.onload = function () {
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
eventer(messageEvent, function (e) {
var origin = e.origin;
//if origin not in pre-defined list, break and return
var messageFromParent = JSON.parse(e.data);
var json = messageFromParent.data;
//send json to web service using AJAX- same origin now
//return the response back to source
e.source.postMessage(JSON.stringify(aJAXResponse), e.origin);
}, false);
}