web-dev-qa-db-ja.com

NETWORK_ERROR:XMLHttpRequest例外101

このエラーが発生しています

NETWORK_ERROR:XMLHttpRequest例外101

1つのサイトから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);

誰にも解決策がありますか?

29
pawan Mangal

指定したurlがサーバーの外部にあり、サーバーがリクエストの送信を許可していない場合、アクセス許可の問題があります。サーバーが明示的に許可しない限り、XMLHttpRequestを使用して別のサーバーのデータにアクセスすることはできません。

更新:これがGoogleの回答として表示されるようになったことを認識し、このエラーに関するドキュメントを見つけようとしました。それは驚くほど大変でした。

この記事 ただし、いくつかの背景情報と解決する手順があります。具体的には、ここでこのエラーに言及しています。

サーバーがWebアプリケーションのOriginからのリクエストを許可するように設定されている限り、XMLHttpRequestは機能します。そうでない場合、INVALID_ACCESS_ERR例外がスローされます

INVALID_ACCESS_ERRの解釈は、ここで見ているもののようです。

これを解決するには、要求を受信するサーバーを、オリジンを許可するように構成する必要があります。これは Mozillaの詳細 で説明されています。

24

XMLHttpRequestを使用して別のサーバーのデータにアクセスできないという制限は、URLが単にリモートサーバーを暗示している場合でも適用できます。

だから:rl = "http://www.myserver.com/webpage.html"

失敗するかもしれません

しかし:rl = "/webpage.html"

成功-要求がwww.myserver.comから行われている場合でも

4
Ian

リクエストはキャッシュされたか、以前にリクエストされたため中止されましたか? XMLHttpRequest Exception 101エラーはいくつかの理由でスローされる可能性があります。同じURLでXMLHttpRequestを複数回送信すると発生することがわかりました。 (URLの最後にナンセンス文字列を無効にするキャッシュを追加してURLを変更すると、リクエストを繰り返すことができます。-リクエストを繰り返すつもりはありませんでしたが、プログラムのイベントが原因でこの例外が発生しました。 )。

リクエストが繰り返される場合に正しいresponseTextまたはresponseXMLを返さないことはバグです(おそらくwebKit)。

この例外が発生したとき、readyState == 4、リクエストオブジェクトstate = 0、responseText == ""、responseXML == nullのonloadイベントを取得しました。これは、サーバーが許可するクロスドメイン要求でした。

これは、webKit/533.1を使用するAndroid 2.3.5システム上にありました

誰が例外の意味についてのドキュメントを持っていますか?

2
Ribo

間違ったXMLを返したときに、このようなことが起こりました(ルートノードに属性を配置しました)。これが誰にも役立つ場合。

2

私は、2つの異なるソリューションを備えた非常に素晴らしい記事を見つけました。

  1. 最初のものはjQueryとJSONPを実装し、そのシンプルさを説明します。
  2. 2番目のアプローチは、PHP呼び出し。非常にシンプルで非常に素晴らしい。

http://mayten.com.ar/blog/42-ajax-cross-domain

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

非同期部分をtrueに設定します

1
Lian

この問題を解決するもう1つの最新の方法は、Cross Origin Ressource Sharingです。 HTML5はこの機能を提供します。このCORS_requestでXMLhttpリクエストを「ラップ」できます。ターゲットブラウザがこの機能をサポートしている場合、それを使用でき、問題はありません。

編集:Additionally私はこの問題を引き起こす可能性のある多くの理由があることを追加する必要があります。クロスドメインの制限だけでなく、WebサービスのWEB.CONFIGの設定が間違っているだけです。

例IIS(.NET):

外部ソース(私の場合はCORSリクエストでコンパイルされたPhonegapアプリ)からのHTTPアクセスを有効にするには、これをWEB.CONFIGに追加する必要があります

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

別のシナリオ:

2つのWebサービスを実行しています... 1つはポート80、もう1つはポート90です。これにより、XML HTTP要求エラーも発生しました。私も理由がわからない:)。とはいえ、これは経験の浅い読者の多くに役立つと思います。

0
chriz