我们有一个应用程序使用SignalR与本地的扫描仪驱动程序进行通信,这些驱动程序已经在IE,Chrome和Firefox上运行了几年,这对于下载SignalR的集线器js头文件没有问题。一旦Edge问世,我们看到了与localhost交谈的问题,经过长时间的努力寻找允许它进行通信的设置(以及他们没有找到解决方案的微软票证的许多小时),我们决定添加标头以允许Edge授予访问域名:
Access-Control-Allow-Origin: https://localhost:11000
这似乎有效,但我们没有注意到它适用于64位Windows 10 Edge,但没有在32位Windows 10 Edge上运行。我花了几个小时降低所有区域的所有安全设置并禁用保护模式,尝试使用不同的ajax技巧来拉取文件,但继续得到错误:
SCRIPT7002: XMLHttpRequest: Network Error 0x2efd, Could not complete the operation due to error 00002efd.
以下伪代码失败:
$.ajax({
url: "https://localhost:11000/signalr/hubs",
crossDomain: true,
success: function (data) {
console.log("success");
},
error: function (jqXHR, textStatus, errorThrown) {
console.log("error:");
console.log(jqXHR);
}
});
我正在寻找任何有关设置或其他任何内容的见解,或者是否有其他人看过这个问题。另外一条信息,fiddler没有显示该呼叫的任何流量,因此它似乎被浏览器阻止。同样在使用Edge-IE失败的同一台计算机上,Chrome和FF将会成功。
答案 0 :(得分:1)
您的请求缺少以下属性,添加哪些属性可以解决问题。
GET
,POST
等application/json
等json
,XML
等另请参阅以下代码段:
type:"POST",
contentType:"application/json; charset=utf-8",
dataType:"json"
答案 1 :(得分:0)
通过进入开发工具并从顶部下拉列表中选择,在IE兼容模式下尝试它,如果错误仍在发生,可能是IE使用的一些Windows系统文件。此调用是否使用证书进行身份验证?也许证书已过期或Edge使用不同的身份验证方法?检查IE中的源选项卡(兼容和不兼容)以查看是否正在加载资源,因为Fiddler仅捕获HTTP和HTTPS流量。这应该指出你在错误等方面的正确方向。最后,也许只是编写一个C#应用程序,对同一个URL发出请求,新版本的.NET可能会使用相同的依赖项,可能会破坏你的呼叫。如果是这样,C#将为您提供足够的描述性错误来解决问题
答案 2 :(得分:0)
我有同样的问题。虽然Ajax对同一域上的页面的调用在其他所有浏览器中都有效,但在Edge中却没有。在另一个选项卡中打开用于Ajax调用的URL将得到正确的结果。 将这段代码添加到为Ajax调用提供服务的页面中以某种方式修复了它...代码在C#中,但是这可能会让我们知道如何在其他语言中修复它。
if (Request.UserHostName == "127.0.0.1")
Response.AppendHeader("Access-Control-Allow-Origin", "*");
答案 3 :(得分:0)
你可以试试这个。
$.ajax({
url:url,
type:"POST",
data:data,
contentType:"application/json; charset=utf-8",
dataType:"json",
success: function(){
//
}
});
并确保正确提供参数,内容类型,数据类型,responseCode..etc
答案 4 :(得分:0)
我和Edge有类似的问题。该修复需要在ajax调用和在localhost上运行的服务器中进行更改。
在ajax调用中,我不得不从旧的text / plain更改为application / json
contentType: 'application/json; charset=utf-8',
本地服务器正在使用Jersey,所以在那里我添加了ContainerResponseFilter实现,它添加了Access-Control-Allow-Headers和Access-Control-Allow-Methods标头。 Access-Control-Allow-Origin已经到位。
res.getHeaders().add("Access-Control-Allow-Headers", "origin, content-type, accept, authorization");
res.getHeaders().add("Access-Control-Allow-Methods", "POST, GET, OPTIONS");