- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 ember 1.5 使用 grunt-cli
并希望使用 dataType: "JSON"
进行 CORS 支持的 ajax 调用。
Ember.$.ajax({
type: "GET",
url: App.serverURL + 'logVisit', // callback for jsonP
data : {
'fp': App.fp
},
dataType : "JSON",
success: function(response) {
console.log('DEBUG: visitor has been registered');
},
error: function(jqXHR, textStatus, errorThrown) {
console.log("DEBUG jqXHR.responseText : ",jqXHR.responseText);
var response = jqXHR.responseText;
console.log('Failure!');
if(jqXHR.status&&jqXHR.status==400){
// alert(jqXHR.responseText);
var response = $.parseJSON(jqXHR.responseText);
if (response) {
console.log(response.error);
} else {
// This would mean an invalid response from the server - maybe the site went down or whatever...
console.log("DEBUG: Inside jqXHR.status : Something went wrong");
}
} else {
console.log("DEBUG: Something went wrong");
}
}
});
在 IE10/11 上运行良好。但是在 IE8/9 上,因为它需要 XDR 对象,所以它不起作用并且显示控制台为
LOG: DEBUG jqXHR.responseText : undefined
LOG: Failure!
LOG: DEBUG: Something went wrong
任何帮助或技巧?
我的请求 header :
Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Host:localhost:8080
Origin:http://localhost:9000
Referer:http://localhost:9000/
User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36
非 IE 8/9 浏览器中的响应 header
Access-Control-Allow-Origin:*
Content-Type:application/json
Date:Wed, 25 Mar 2015 16:01:56 GMT
Server:Apache-Coyote/1.1
Transfer-Encoding:chunked
最佳答案
我找到了支持@Isowen 回复的答案。
我在window.App = Ember.Application.create({});
之前添加了这段代码为 IE8/9
Ember.$.ajaxTransport( function( options, originalOptions, jqXHR ) {
var xdr;
return {
send: function( _, completeCallback ) {
xdr = new XDomainRequest();
xdr.onload = function() {
if (xdr.contentType.match(/\/json/)) {
options.dataTypes.push("json");
}
completeCallback(200, 'success', { text: xdr.responseText } );
};
xdr.onerror = xdr.ontimeout = function() {
completeCallback(400, 'failed', { text: xdr.responseText } );
}
xdr.open(options.type, options.url);
xdr.send(options.data);
},
abort: function() {
if(xdr) {
xdr.abort();
}
}
};
});
根据@Isowen 的建议,在执行 ajax 请求时
Ember.$.ajax({
type: "GET",
url: App.serverURL + 'logVisit',
data : {
'fp': App.fp
},
dataType : "JSON",
xhrFields: {withCredentials: true}, // line added
....
});
使用 REST 适配器处理请求的人可以使用
App.ApplicationAdapter = DS.RESTAdapter.extend({
host: App.host,
namespace : App.namespace,
ajax: function(url, method, hash) {
hash = hash || {}; // hash may be undefined
hash.crossDomain = true;
hash.xhrFields = { // import line added
withCredentials: true // import line added
};
console.log('DEBUG: inside RESTAdapter ajax call');
return this._super(url, method, hash);
}
});
在后端(这里是 Spring - Java)
@Component("corsFilter")
public class CORSResponseFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
response.addHeader("Access-Control-Allow-Origin", "http://YOUR-LINK"); // IMPORT LINE ADDED
response.addHeader("Access-Control-Allow-Credentials", "true"); // IMPORT LINE ADDED
if (request.getHeader("Access-Control-Request-Method") != null
&& "OPTIONS".equals(request.getMethod())) {
// CORS "pre-flight" request
response.addHeader("Access-Control-Allow-Methods",
"GET, POST, PUT, DELETE");
response.addHeader("Access-Control-Allow-Headers",
"X-Requested-With,Origin,Content-Type, Accept");
}
filterChain.doFilter(request, response);
}
}
感谢@Isowen 的帮助。
关于java - Ember 支持 CORS 的 XDomainRequest(xdr),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29255559/
我在使用 XDomainRequest onerror 处理程序时遇到问题。发生错误时,我似乎无法获取 HTTP 响应的主体(通过 xdr.responseText)。成功的请求 (200 OK) 工
XDomainRequest 大多数时候工作正常但有时在 ie9 中特别中止。以前有人经历过吗? 如果您想查看这是我正在使用的 xdr 实现: (function( jQuery ) { if (
我无法通过 Internet Explorer XDomainRequest 获取 POST 数据。根本没有显示任何内容.. 我创建了一个fiddle parim.ee/test.php 只是打印出
我正在尝试对使用 XDomainRequest (IE8) 返回 json 的服务进行异步调用。问题是我总是得到一个错误(onerror 事件被触发,并且 responseText 总是 null),
我正在尝试使用 Microsoft XDomainRequest 发送跨域请求。这是代码 ... if ($.browser.msie && window.XDomainRequest) { //
在 Firefox 或任何其他浏览器中是否有等效于 Internet Explorer 的 XDomainRequest 的? 我想访问域外的服务/网站。 最佳答案 Internet Explorer
我正在为我的公司编写一个基于 Web 的工具,它在本地 Intranet 之外运行并在 IE8 中运行。我相信,由于公司计算机在国有企业中,除了 IT 部门外,没有人可以控制浏览器设置,他们不太可能做
我有一个问题...我使用 jQuery ajax 调用返回 XML 的网络服务。 jQuery ajax 对除 ie 之外的所有浏览器都非常有效。 所以对于 ie 浏览器,我使用 XDomainReq
我看到调用了我的错误处理方法但是因为其中没有参数,我不知道如何检查它是什么类型的错误。 var xdr = new XDomainRequest(); xdr.onerror = function(e
对于 XMLHttpRequest 这很简单: var xhr = new XMLHttpRequest(); xhr.open('POST', MyUrl, true); xhr.setReques
编辑:考虑到 dennmat 的建议,我设法使用 Image() 将我的图像获取脚本简化为几行: window.onload = function(){ var img; captur
我正在尝试在 IE 上进行跨域。 我使用 XDomainRequest,并为所有事件(onerror、onload、onprogress 和 ontimeout)植入日志记录以监控进度。 它有时会工作
我们正在使用 PixiJS 创建一个应用程序,其中有一个动态 json 加载器。 它使用以下方式加载 .json 文件: if(window.XDomainRequest) { this.aj
致力于将数据推送到跨域服务器的 javascript 模块。我在 qunit 中有一个测试套件来验证行为,使用 sinon 拦截请求并伪造来自 XmlHttpRequest 的响应。这很好用,除了 I
我正在尝试在 ie9 上使用 XDomainRequest 执行请求,我面临的问题是尝试获取响应 header 时。 它是否支持 getResponseHeader 方法或在对象 API 中有类似的方
我想我已经阅读了 XDomainRequest 上的每篇 StackOverflow 帖子以及 AJAX 和 WCF 上的另外几十篇文章,但我仍然无法获得 。 XDomainRequest AJAX
我正在使用 JSON 请求来检索我正在开发的网页中的一些流计量信息。为了兼容 IE,我使用 XDomainRequest。 XDR 在页面首次加载期间成功检索数据,但后续调用(加载后我在页面上使用 w
我有一个 Controller 类,我可以在 API 上发起一个 Get 调用,但是当我尝试一个 POST 命令时,我得到 HTTP/1.1 415 Unsupported Media Type 有什
我正在处理一些跨域 ajax 请求。我使用 XDomainRequest 在 IE8 和 IE9 中发送请求。目前,它适用于 Get 请求,但不适用于 Post 请求。 当我使用 Fiddle 捕获请
我创建了一个使用 Google Javascript API 的 php 页面。我正在尝试使用 Ajax 动态填充标记的信息窗口,但在 xdr.open 行上出现权限被拒绝错误。我已经检查了与类似错误
我是一名优秀的程序员,十分优秀!