以下适用于IE以外的所有浏览器(我在IE 9中测试).
jQuery.support.cors = true;
...
$.ajax(
url + "messages/postMessageReadByPersonEmail",
{
crossDomain: true,
data: {
messageId : messageId,
personEmail : personEmail
},
success: function() {
alert('marked as read');
},
error: function(a,b,c) {
alert('failed');
},
type: 'post'
}
);
Run Code Online (Sandbox Code Playgroud)
我有另一个使用的函数dataType: 'jsonp',但我不需要在这个AJAX调用上返回任何数据.我的最后一招将是返回JSONP中包含的一些乱码,以使其正常工作.
任何想法为什么IE搞砸了没有返回数据的CORS请求?
我试图帮助一位同事调试过去6个月来一直没有问题的问题.在最近部署ASP.NET MVC 2应用程序之后,FileResult强制用户打开或保存PDF文件的响应在客户端计算机上存在的问题足够长,以便PDF阅读器打开它们.
早期版本的IE(特别是6)是受影响的唯一浏览器.Firefox和Chrome以及较新版本的IE(> 8)都表现得如预期.考虑到这一点,下一节将定义重新创建问题所需的操作.
href属性的普通超链接).在action方法中,标头设置为指示浏览器如何缓存响应.他们是:
response.AddHeader("Cache-Control", "public, must-revalidate, post-check=0, pre-check=0");
response.AddHeader("Pragma", "no-cache");
response.AddHeader("Expires", "0");
Run Code Online (Sandbox Code Playgroud)
对于那些不熟悉标题的人不熟悉:
一个.缓存控制:公共
表示任何缓存都可以缓存响应,即使它通常只是非缓存或只能在非共享缓存中缓存.
湾 缓存控制:必须重新验证
当高速缓存接收到的响应中存在must-revalidate指令时,该高速缓存必须在该条目变为陈旧后才能响应后续请求而不首先使用源服务器重新验证它
C.缓存控制:预检(IE5引入)
定义以秒为单位的间隔,在此之后必须检查实体的新鲜度.检查可能在用户显示资源后发生,但确保在下一次往返时缓存的副本将是最新的.
d.缓存控制:后检查(IE5引入)
定义以秒为单位的时间间隔,在此之后必须在向用户显示资源之前检查实体的新鲜度.
即 Pragma:no-cache(确保向后兼容HTTP/1.0)
当请求消息中存在no-cache指令时,应用程序应该将请求转发到源服务器,即使它具有所请求内容的缓存副本
F.过期
Expires entity-header字段给出了响应被视为过时的日期/时间.
我们从操作中返回文件
return File(file, "mime/type", fileName);
Run Code Online (Sandbox Code Playgroud)向用户显示"打开/保存"对话框
这里有六个其他应用程序使用相同的标题来强制Excel,CSV,PDF,Word和大量其他内容在用户,从来没有一个问题.
在返回a之前,在action方法中设置响应头FileResult.我已经让我的同事尝试创建一个继承的新类,FileResult然后重写该ExecuteResult方法,以便它修改标题,然后base.ExecuteResult()改为 - 没有状态.
我预感到"0"的"Expires"标题是罪魁祸首.根据这篇W3C文章,将其设置为"0"意味着"已经过期".我确实希望它过期,我只是不希望IE在处理它的应用程序有机会打开它之前将其从文件系统中删除.
一如既往,谢谢!
在进一步测试(使用Fiddler检查标头)时,我们发现我们认为设置的响应头不是浏览器解释的响应头.由于我自己并不熟悉代码,因此我没有意识到一个潜在的问题:标题在操作方法之外被踩到了.
尽管如此,我还是要打开这个问题.依然突出是这样的:有似乎是有出入Expires具有数值头 …