Windows 10上的Edge 32位阻止对localhost的ajax调用,网络错误为0x2efd

时间:2016-06-16 20:20:07

标签: javascript jquery ajax signalr microsoft-edge

我们有一个应用程序使用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将会成功。

5 个答案:

答案 0 :(得分:1)

您的请求缺少以下属性,添加哪些属性可以解决问题。

  1. 请求方法:GETPOST
  2. 请求内容类型(标题):application/json
  3. 请求数据类型(标题):jsonXML
  4. 另请参阅以下代码段:

    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");