4

以下のコードを使用して、サーバーから単純なXML HTTP リクエストを実行すると

var targetUrl = "http://server/Service1.svc?input1=uno&input2=duo";
document.getElementById("console").innerHTML += "<br>commencing";

var xhr = new XMLHttpRequest();
xhr.onload = function () {
  document.getElementById("console").innerHTML += "<br>callbacking";
  alert(xhr.responseText);
}

xhr.open("GET", targetUrl);
document.getElementById("console").innerHTML += "<br>finishing";

xhr.send();

FireBug のコンソールにステータス コード 302 が表示されます。この W3 articleによると、ステータス コード 302 は、リソースが一時的にリダイレクトされたことを意味します。自分の URL を FireFox に入力すると、想定どおりの応答が得られ、見栄えがよくなるため、私の場合はそれが何を意味するのか完全にはわかりません。

この問題に関する多くの記事がありますが、私はそれをまっすぐにすることはできません. たとえば、これはステータス コードの定義を言い換えているだけです。これはGETの代わりにHEADを使用することを提案していますが、それは私の場合のオプションではありません (絶対に必要でない限り)。ここでは、ステータス コード 302によって、ページが移動した場所への正しいリダイレクトが自動的に行われる (ステータス コード 200 が発生する)とさえ主張されていますが、私の場合はそうではありません。

調べてみましxhr.getRespoonseHeader("Content-Type")たが、どうやらnull.

私は立ち往生しています。私の問題について何ができますか?

4

2 に答える 2

2

サーバーは次のいずれかのようです。

  • 非 wwwhttp://を www にリダイレクトするhttp://www.
  • http://保護されていない HTTPを保護された HTTPS にリダイレクトするhttps://

Web ブラウザでhttp://server/Service1.svc?input1=uno&input2=duo、アドレス バーを表示して観察します。それは何らかの形で変化しますか?wwwが追加されているかどうかを確認するか、またはhttps.

また、JavaScript URL を www バージョンと https バージョンに変更して、いずれかが修正されるかどうかを確認することもできます。

編集:httpsについてあなたが言ったことに基づいて、httpをhttpsにリダイレクトしていると思います。あなたの ajax コードが正しくないため、コールバックが機能しない理由が説明されます。

onreadystatechangeイベント (onload ではなく)を使用し、4完了したことを意味する状態を確認する必要があります。

xhr.onreadystatechange = function(){
    if(xhr.readyState == 4){
            document.getElementById("console").innerHTML += "<br>callbacking";
            alert(xhr.responseText);
    }
}
xhr.open("GET", targetUrl, true);
xhr.send(null); 
于 2012-11-21T17:23:12.027 に答える
1

IIS サーバーの内部リダイレクトに関係している可能性があります。また、サービスがアプリケーション プールにインストールされているかどうかも確認します。

また、プロトコルの切り替えやドメインのあいまいさ (つまり、セキュア/非セキュア http および/または with/sans w3 プレフィックス) のようなものである可能性もあります。

于 2012-11-27T21:04:40.050 に答える