【发布时间】:2014-11-24 18:59:04
【问题描述】:
我需要使用 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(author) 或 http(publish)
我已经在 ajax 之前设置了 $.support.cors = true;。我错过了什么?
【问题讨论】:
-
错误是什么?你是从 https 转到 http 吗?
-
data: "{key:"+value+"}"? (刚第一次见到) -
更新了问题。 JSON 数据不是问题。错误是“传输错误”,服务是 https,而我的页面可以是 http 或 https
-
要在 IE8/9(IE7 不支持 CORS)中执行 CORS 请求,您必须使用 XDomainRequest 对象。 jQuery 不会为您实现这一点,您必须手动发送请求或包含实现它的 jQuery 插件。在 IE10+ 中,这应该不是问题,但是还有其他细微的差异仍然可能导致问题。
-
另请注意,
$.support.cors = true;毫无意义,crossDomain: true,在您的情况下什么也不做,如果data确实是一个 json 字符串,则不需要processData: false,。
标签: javascript jquery ajax cross-domain aem