Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Windows 10上的边缘32位阻止对本地主机的ajax调用,出现网络错误0x2efd_Javascript_Jquery_Ajax_Signalr_Microsoft Edge - Fatal编程技术网

Javascript Windows 10上的边缘32位阻止对本地主机的ajax调用,出现网络错误0x2efd

Javascript Windows 10上的边缘32位阻止对本地主机的ajax调用,出现网络错误0x2efd,javascript,jquery,ajax,signalr,microsoft-edge,Javascript,Jquery,Ajax,Signalr,Microsoft Edge,我们有一个应用程序,使用Signal与本地扫描仪驱动程序进行对话,该应用程序已经在IE、Chrome和Firefox上生产了几年,在为Signal下载hubs js头文件时没有问题。Edge发布后,我们发现与localhost对话时出现问题,经过长时间的努力,我们找到了一个允许其通信的设置(并且使用Microsoft票证花费了很多时间,但他们没有找到解决方案),我们决定添加头,以允许Edge授予对域的访问权: 访问控制允许原点:https://localhost:11000 这似乎可行,但我们几

我们有一个应用程序,使用Signal与本地扫描仪驱动程序进行对话,该应用程序已经在IE、Chrome和Firefox上生产了几年,在为Signal下载hubs js头文件时没有问题。Edge发布后,我们发现与localhost对话时出现问题,经过长时间的努力,我们找到了一个允许其通信的设置(并且使用Microsoft票证花费了很多时间,但他们没有找到解决方案),我们决定添加头,以允许Edge授予对域的访问权:

访问控制允许原点:https://localhost:11000

这似乎可行,但我们几乎没有注意到它适用于64位Windows10边缘,但不适用于32位Windows10边缘。我花了数小时降低了所有区域的所有安全设置,禁用了保护模式,尝试了不同的ajax技巧来提取文件,但仍然出现错误:

SCRIPT7002:XMLHttpRequest:networkerror 0x2efd,由于错误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也会成功。

在IE兼容模式下尝试,进入“开发工具”并从顶部下拉列表中进行选择。如果此选项打开时仍出现错误,则IE使用的可能是某些Windows系统文件。此调用是否使用证书身份验证?可能证书已过期,或者Edge使用了不同的身份验证方法?检查IE中的sources选项卡(兼容和不兼容),查看是否正在加载资源,因为Fiddler只捕获HTTP和HTTPS流量。这将为您指出错误等方面的正确方向。最后,也许只需编写一个C#应用程序,向相同的URL发出请求,新版本的.NET可能使用相同的依赖项,这可能会中断您的呼叫。如果是这样的话,C#会给你足够的描述错误来解决这个问题

我也有同样的问题。虽然对同一域上的页面的Ajax调用在其他浏览器中都能正常工作,但在Edge中却不能。在不同的选项卡中打开用于Ajax调用的url将得到正确的结果。 将这段代码添加到为Ajax调用提供服务的页面中,以某种方式修复了它。。。代码是用C#编写的,但这可能会让您大致了解如何用其他语言修复它

    if (Request.UserHostName == "127.0.0.1")
        Response.AppendHeader("Access-Control-Allow-Origin", "*");
你可以试试这个

    $.ajax({
        url:url,
        type:"POST",
        data:data,
        contentType:"application/json; charset=utf-8",
        dataType:"json",
        success: function(){
        //
        }
    });

并确保正确提供参数、内容类型、数据类型、响应代码..等

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

  • 请求方法:
    GET
    POST
  • 请求内容类型(标题):
    应用程序/json
    ,等等
  • 请求数据类型(头):
    json
    XML
  • 另请查看以下代码段:

    type:"POST",
    contentType:"application/json; charset=utf-8",
    dataType:"json"
    

    我的Edge也有类似的问题。修复程序需要更改在本地主机上运行的ajax调用和服务器

    在ajax调用中,我不得不从旧的text/plain更改为application/json

    contentType: 'application/json; charset=utf-8',
    
    本地服务器正在使用Jersey,所以我添加了ContainerResponseFilter实现,该实现添加了访问控制允许标头和访问控制允许方法标头。访问控制允许原点已就位

    res.getHeaders().add("Access-Control-Allow-Headers", "origin, content-type, accept, authorization");
    res.getHeaders().add("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
    

    有几个问题和需要检查的东西。首先,验证
    localhost
    是否解析为127.0.0.1(我见过一些人把hosts文件弄得一团糟,把事情搞砸了)。第二,证书是否有效?或者自签名证书?@dman2306如果它是64位而不是32位,则它不能作为主机文件,因为它是一个全局资源。在我的回答中,我还建议使用证书。该证书适用于其他3种浏览器。此外,证书未过期。我们在安装时生成一个自签名证书,该证书将持续很长时间。此外,这不是一台计算机的问题,它已经通过我们的QA团队,在多台32位计算机上看到了相同的问题,但在多台64位计算机上没有看到。它通过各种配置进行测试。该问题仅在32位边缘出现。32位Win 7 IE甚至32位Win 10 IE都可以工作。@StevenEdison从我所看到的,Edge将拒绝具有您提到的错误的跨域自签名证书。所以我才提到它。为什么它只发生在32位我不知道,但我在使用自签名证书时遇到了这个问题。实际上,没有其他选择。这是一种不寻常的情况,因为我们正在客户端计算机上安装证书,以便在其计算机上运行一个小型服务器,没有人会签署分发到100000多台计算机(字面上)的“localhost”证书。到目前为止,我们必须跨越一些障碍才能使事情顺利进行(尤其是FF),但除了在Edge 32位上,我们还没有看到这个问题。感谢您提供的信息dman2306,我们将在继续研究该问题时考虑到这一点。IE调试工具有此下拉列表,但边缘调试工具没有看到:。接下来,如何编写一个跨域的C#应用程序?我可以写一个请求,然后再写另一个请求,但不能写CORS。我想我可以编写一个web应用程序,在js中设置一个断点,看看它说了些什么,但即使这样,也会像Edge一样填充相同的ajax事件对象。用IE 11试试,但如果你需要一个跨源应用程序,我会非常乐意提供帮助,但这种问题并不需要C#app来解决,您只需要找出Edge 64位和Edge 32位的区别。。。除了显而易见的:)如文章中所述,它在同一台计算机上的IE上工作(IE 11)