【问题标题】:NetworkError: Failed to execute 'send' on 'XMLHttpRequest'NetworkError:无法在“XMLHttpRequest”上执行“发送”
【发布时间】:2015-12-28 23:28:54
【问题描述】:

我正在尝试向本地托管在我的笔记本电脑上的服务器发出 POST ajax 请求,但我似乎无法取回任何信息。当我点击我的网站(本地主机)上的按钮时,我可以看到服务器传回正确的信息,但在前端我收到此错误:

错误:NetworkError:无法在“XMLHttpRequest”上执行“发送”:无法加载“http://comp-ip”。

var param = JSON.stringify({varA:"varA",varB:"varB"});

$.ajax({
  type: "POST", 
  url: "http://comp-ip",
  async: false, 
  data: param,
  success: function(result, status, xhr){
    alert(result + ": " + status);
  },
  error: function(xhr, status, err) {
    alert(status + ": " + err);
  }
});

似乎每次都触发错误而不是“成功”。有人知道出了什么问题吗?

编辑:我尝试在没有 AJAX 的情况下发送正常的 POST 请求,但它也抛出了一个“未定义”错误:

$(document).ready(function(){
    var param = JSON.stringify({varA:"varA",varB:"varB"});
     $("#btn").click(function(event){
           $.post( 
              "http://ip",
               param,
               function(data) {
                 $('#container').html(data);
               }
           ).fail(function(error) { alert(error.responseJSON) });
        });
});

我尝试过的其他事情: 1) 将浏览器更改为 Safari(同样的,服务器返回信息但站点出现错误) 2) 将 async = true 设置为 false。由于某种原因,当我将其设置为 true 时,服务器根本没有响应。当它为 false 时,服务器会响应。

【问题讨论】:

  • 我花了一个小时来处理这个问题,而问题在于我的 AdBlocker 阻止了请求...

标签: jquery ajax http-post


【解决方案1】:

我遇到了同样的问题,但出现了相同的错误消息。在我的情况下,这是由于服务器使用sync-xhr: none 设置了Feature-Policy 标头引起的。删除此指令解决了问题。

【讨论】:

    【解决方案2】:

    您可以像这样在 Windows 上使用 Chrome 测试您的网页

    chrome.exe --allow-file-access-from-files
    

    【讨论】:

      【解决方案3】:

      几分钟前我确实遇到了这个问题。问题是您需要将async:false 设置为async:true。我不确定为什么会这样,我猜是因为 HTML5 比 XML 更新。

      这个网站上的错误有点不同,但我认为它是相似的:JavaScript console.log causes error: "Synchronous XMLHttpRequest on the main thread is deprecated..."

      更新

      嗨,我回来了,带来了一些新的和改进的信息。跨域发生在端口以及域/IP 上,并且可能会在大多数体面的浏览器中出现。如果您想知道发生了什么,请尝试将 IP 更改为 localhost,反之亦然(如果您使用的是 localhost)。请记住,当您使用不同的端口时也会出现此问题。为了快速修复,请确保在来自后端服务器的任何标头中,您提供了正确的访问控制标头 response.addHeader("Access-Control-Allow-Origin", "*");

      代码来源于this question

      【讨论】:

      • 您好,感谢您的回复。我尝试将 async 从 false 设置为 true 但奇怪的是我的服务器根本没有响应。与我的服务器确实返回信息的 async = false 相反。
      • 您收到未定义的错误,这意味着 post 方法的 url 可能无效。 js文件在服务器上吗?
      • 啊,是的,加载资源失败肯定意味着你的网址有误。您使用的是什么类型的服务器?
      • 这是一个运行在我的计算机上的 java 服务器。但是,它似乎返回了正确的信息,这意味着 URL 应该是正确的。我发现我的浏览器控制台抛出了一个不同的错误,这让我认为这是一个跨域问题。它说:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'localhost' 不允许访问。尽管两者都在我的计算机上运行,​​但为什么它是跨域的,这没有任何意义?
      • 过一段时间再回答,位置标头不一样。我的猜测是您在不同的端口或本地主机子域上运行服务器。无论哪种方式,重要的是要记住 localhost:4000 仍然与例如 localhost:80 有很大不同。对于计算机而言,恶意服务器和良性服务器可能位于同一位置,只是因为服务器位置不同。出于安全考虑,启用了此功能。它可能不会发生在像 Netscape 这样的旧浏览器上,或者如果你使用 curl。
      【解决方案4】:

      这是一个跨域资源问题 (CORS)。我的服务器正在向我返回正确的信息,但我的浏览器拒绝接受它。要修复它,我必须在我的 java 服务器(不是我的站点)上添加 2 行以将它们设置为 response header:

      yourownvariable.setHeader("Access-Control-Allow-Origin:", "origin url of your site");
      yourownvariable.setHeader("Access-Control-Allow-Methods", "GET, POST,PUT");
      

      【讨论】:

      • 这个错误也发生here
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-07
      • 2018-12-29
      • 2019-04-23
      • 1970-01-01
      • 1970-01-01
      • 2016-12-03
      相关资源
      最近更新 更多