NETWORK_ERROR:XMLHttpRequest异常101

时间:2010-02-10 10:09:46

标签: ajax xmlhttprequest

我收到此错误

  

NETWORK_ERROR:XMLHttpRequest例外101

尝试从一个站点获取XML内容时。

这是我的代码:

    var xmlhttp; 
    if(window.XMLHttpRequest) { 
        xmlhttp = new XMLHttpRequest();
    }

    if (xmlhttp==null) {
        alert ("Your browser does not support XMLHTTP!");
        return;
    }

    xmlhttp.onReadyStateChange=function() {
        if(xmlhttp.readyState==4) {
            var value =xmlhttp.responseXML;
            alert(value);
        }
    }
    xmlhttp.open("GET",url,false);
    xmlhttp.send();
    //alert(xmlhttp.responseXML);
}

xmlhttp.open("GET",url,false);
xmlhttp.send(null);

有人有解决方案吗?

7 个答案:

答案 0 :(得分:24)

如果您提供的url位于服务器外部,并且服务器未允许您发送请求,则表示您具有权限问题。您无法使用XMLHttpRequest从其他服务器访问数据,而服务器不会明确允许您这样做。

更新:实现这一点现在可以作为Google的答案显示,我试图找到有关此错误的一些文档。这真是太难了。

This article但是,有一些背景信息和步骤要解决。具体来说,它在这里提到了这个错误:

  

只要服务器配置为允许来自Web应用程序源的请求,XMLHttpRequest就可以工作。否则,抛出INVALID_ACCESS_ERR异常

INVALID_ACCESS_ERR 的解释似乎就是我们在这里看到的。

要解决此问题,必须将接收请求的服务器配置为允许原点。这在more details at Mozilla

中有所描述

答案 1 :(得分:4)

即使URL只是暗示远程服务器,也无法应用使用XMLHttpRequest从其他服务器访问数据的限制。

所以:         url =“http://www.myserver.com/webpage.html”

可能会失败,

但:         url =“/ webpage.html”

成功 - 即使请求来自www.myserver.com

答案 2 :(得分:2)

当我返回错误的XML(我在根节点中放置了一个属性)时,我发生了类似的事情。如果这有助于任何人。

答案 3 :(得分:2)

请求已中止,因为它已被缓存或之前请求过了?由于多种原因,似乎可能会抛出XMLHttpRequest异常101 错误。我发现当我多次使用相同的URL发送XMLHttpRequest时会发生这种情况。 (通过在URL的末尾附加缓存失败的无意义字符串来更改URL允许重复请求。 - 我不打算重复请求,但程序中的事件导致它发生并导致此异常)。

在重复请求的情况下,不返回正确的responseText或responseXML是一个错误(可能是webKit)。

当发生此异常时,我确实得到了一个onload事件,其中readyState == 4,请求对象state = 0,responseText ==“”和responseXML == null。这是一个跨域请求,服务器允许。

这是在使用webKit / 533.1

的Android 2.3.5系统上

任何人都有关于异常应该是什么意思的文件吗?

答案 4 :(得分:1)

我发现了一篇非常好的文章,有两种不同的解决方案。

  1. 第一个实现jQuery和JSONP,解释它是多么简单。
  2. 第二种方法,它通过PHP调用重定向。非常简单,非常好。
  3. http://mayten.com.ar/blog/42-ajax-cross-domain

答案 5 :(得分:1)

xmlhttp.open("GET",url, true);

将异步部分设置为true

答案 6 :(得分:0)

另一种解决此问题的现代方法是Cross Origin Ressource Sharing。 HTML5提供此功能。你可以"包装"你的XMLhttp请求在这个CORS_request和 如果目标浏览器支持此功能,您可以使用它并且不会有任何问题。

编辑: 另外,我必须补充说,有很多原因导致这个问题。 您的Web服务的WEB.CONFIG中不仅存在跨域限制,而且只是错误的设置。

示例IIS(.NET):

要从外部源启用HTTP访问(在我的情况下是带有CORS请求的已编译的Phonegap应用程序),您必须将其添加到您的WEB.CONFIG

    <webServices>
        <protocols>
            <add name="HttpGet"/>
            <add name="HttpPost"/>
        </protocols>
    </webServices>

另一种情况:

我有两个webservices正在运行......一个在端口80上,一个在端口90上。这也给了我一个XML HTTP请求错误。我甚至不知道为什么:)。不过,我认为这可以帮助许多没有经验丰富的读者。