1

Windows Phone 8 でアプリをテストしているときに、奇妙な問題に遭遇しました。サード パーティの URL を呼び出すために、xmlHttpRequest (bufferarray として送信する必要があるため、ajax を使用できません) を使用しています。これは Android と iOS では完全に機能しますが、WP8 ではエラーがスローされます 例:

 var xhr = new XMLHttpRequest();
 xhr.onreadystatechange = function (){                      
      if(xhr.readyState == 4){
           if(xhr.status==200){     
               alert(xhr.responseText);
           }else{
                console.log("Error: "+xhr.responseText);
           }
      }
 }
 console.log("1");
 xhr.timeout = 30000;
 console.log("2");
 xhr.open("POST","http://google.com",true);
 console.log("3");
 xhr.setRequestHeader("Content-Type",contentType+"; boundary=" + boundary);
 console.log("4");
 //other headers / auth etc
 console.log("about to post");
 xhr.send(bodyBuf);

これにより、次のようになります。

 log:"before request"
 log:"1"
 log:"2"
 log:"Error in error callback: Cameraxxxxx = InvalidStateError"

ただし、オープンを次のように変更すると:

 xhr.open("POST","google.com",true); //or www.google.com etc

これはそのまま送信されますが、URL が見つからないため 404 ステータスが返されます。私は明らかにリクエストでグーグルを使用していませんが、エラーは同じです。「http://」を指定するとエラーになりますが、指定しないとエラーにはなりませんが、URL が見つかりません。

どんな考えでも大歓迎です。


あることを見つけましたが、それが関連しているかどうかはわかりません。W3C html 5 ドキュメントによると、ドキュメントが完全にアクティブでない場合 (ブラウジング コンテキストのアクティブなドキュメントである場合)、open() で InvalidStateError がスローされます。そして、これがエラーの原因である場合; ドキュメントがアクティブなドキュメントにならない方法と、URL に存在しないアプリのベース URL を定義する方法 (ドキュメントは、ベースをドキュメントのドキュメント ベース URL に設定する (またはソースの起点/リファラー ソースを設定する) ことを提案しています)。


一歩近づいた。いろいろいじった後、何らかの理由で WP8 では、他のものを適用する前に xhr を開く必要があることが最終的にわかりました。したがって、 xhr.timeout を xhr.open の種類の下に移動すると機能します。

これは私の特定のケースで別の問題を引き起こします..しかし、それはおそらく別のトピックです。

4

1 に答える 1