【问题标题】:Error on AJAX call:Error: NetworkError: DOM Exception 19 [closed]AJAX 调用错误:错误:NetworkError:DOM 异常 19 [关闭]
【发布时间】:2013-07-29 02:41:40
【问题描述】:

发出跨域 ajax 请求时出现此错误。

错误:NetworkError:DOM 异常 19

请帮助解决这个问题。卡住真的很糟糕:(

【问题讨论】:

  • 你用的是什么浏览器?例如,Chrome 的跨域策略有问题..
  • 我在 chrome 中遇到了这个问题。但似乎在 Firefox 中也存在同样的问题
  • 正计划将其切换到 JSONP 而不是 ajax。这对我有帮助吗?因为在 Mozilla FF 中它说 "NetworkError: 403 Forbidden "

标签: javascript ajax cross-domain jsonp


【解决方案1】:

在 Chrome 中使用同步请求时出现此错误:

var req = new XMLHttpRequest();
req.open("GET", url, false) // false denotes synchronous call
req.send();

异步执行(无论如何我都想这样做)并没有给我错误。

然后我发现服务器重写了 URL。如果我使用重写的 URL,我没有收到错误。可能是一个 Chrome 错误,因为 Safari 可以很好地处理同步的、非重写的情况。

不知道我是否会报告它,因为无论如何同步 XMLHttpRequests 已被弃用。

【讨论】:

    【解决方案2】:

    要避免服务器的跨域策略可以使用Korz,只需添加

    <script src="//tomodo-tools.s3.amazonaws.com/tomodo.korz-0.5.js"></script>
    

    到您的&lt;head&gt; 并且所有跨域请求都将通过tomodo.me 路由,因此它们的Access-Control-Allow-Origin header 是'*'。

    【讨论】:

    • 它不起作用!你知道有没有其他服务提供这样的东西?
    【解决方案3】:

    为了让跨域 AJAX 调用正常工作,我在服务器上使用了 PHP ...

    getRemoteUrl.php

    <?php
    if (preg_match("/^[();[]{}]+$/", $_GET['url'])) {
      //Something bad
    } else {
      $ctx = stream_context_create(array('http' => array('timeout' => 10)));
    
      if (!(@$contents = file_get_contents($_GET['url'], 0, $ctx))) {
        //fail
      } else {
        //success
        echo $contents;
      }
    }
    ?>
    

    然后调用 PHP 文件并像直接调用网站一样使用输出。

    function GetXmlHttpObject() {
      if (window.XMLHttpRequest) {
      // code for IE7+, Firefox, Chrome, Opera, Safari
        return new XMLHttpRequest();
      } else if (window.ActiveXObject) {
      // code for IE6, IE5
        return new ActiveXObject("Microsoft.XMLHTTP");
      } else {
       return null;
      }
    }
    
    var xmlhttp = GetXmlHttpObject();
    if (xmlhttp === null) {
      //Your browser does not support XMLHTTP!
    } else {
      xmlhttp.open("GET", "getRemoteUrl.php" + "?url=someRemoteUrl", false);
      xmlhttp.send();
      var webpage = xmlhttp.responseText;
      //do something with webpage
    }
    

    我建议改用异步;为简洁起见,我使用了同步。 如果 PHP 不是首选或不可用,则可以使用其他服务器端语言来完成。

    【讨论】:

      【解决方案4】:

      一个常见的错误是在期望 http 连接的服务器上发送 https 请求。

      【讨论】:

        【解决方案5】:

        DOM 异常 19 指的是“网络错误”。您在 Ajax 调用中联系的 URL 是否可用?

        如果服务器支持,跨域请求是可能的!在进行实际的 GET/POST 调用之前,浏览器会向服务器发出一个 OPTIONS 调用,以检查它是否支持跨域请求。检查您正在联系的服务器是否支持跨域请求。 有关跨域请求的更多详细信息,请参阅这篇很有帮助的文章:Using CORS

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-07-03
          • 1970-01-01
          • 2020-01-04
          • 1970-01-01
          • 2012-12-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多