0

私は Web 開発の世界にかなり慣れていないので、Internet Explorer 8 で txt ファイルを読み取り、それを Web サイトのソース コードと比較して、それらが等しいかどうかを確認しようとしています。これは、Web ページが正しく機能しているかどうかを確認できるようにするためです。

xmlhttprequest を使用してソース コードを取得し、(Web ページと同じドメインにある) テキスト ファイルを取得しようとしましたが、アクセス拒否エラーが発生しました。

いくつかの調査の後、クロスドメイン xmlhttprequests が機能しないことがわかりましたが、それは私がやろうとしていることではないので、どうすればよいかわかりません。

Firefox(現在のバージョン)で同じコードを実行しました。ファイルは読み取りますが、Web ページは読み取りません!

2 つのブラウザーのどちらを使用するかは気にしませんが、現時点では、それぞれがやりたいことの半分を実行します。

私のコードは次のとおりです。

function source1(){
    xmlhttp=new XMLHttpRequest();
    xmlhttp.open("GET", "http://website",true);
    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4) {
            document.getElementById('textzone').value = xmlhttp.responseText
            var inputString = xmlhttp.responseText;
            alert(inputString);
            comparison(inputString)
        }
    }
    xmlhttp.send(null)
}

function comparison(inputString){
    xmlhttp1=new XMLHttpRequest();
    xmlhttp1.open("GET", "comparisondoc.txt", false);
    xmlhttp1.onreadystatechange=function() {
        if (xmlhttp1.readyState==4) {
            var compareString = xmlhttp1.responseText;
            alert(compareString)
            if(inputString==compareString){
                alert("Strings are equal");
            }
        }
    }
    xmlhttp.send(null)
}

私が知る必要があるのは、ファイルが ie8 で開かない理由、または Web サイトのソース コードが Firefox で (アラートに) 空白で表示される理由だけです。どんな助けでも大歓迎です。

4

3 に答える 3

0

ブラウザのサポートの問題である可能性があります。XMLHttpRequest を初期化するには、次のコードを試してください。

function createRequest() {
  try {
    request = new XMLHttpRequest();
  } catch (trymicrosoft) {
    try {
      request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (othermicrosoft) {
      try {
        request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (failed) {
        request = false;
      }
    }
  }

  if (!request)
    alert("Error initializing XMLHttpRequest!");
}
于 2012-12-07T11:28:36.487 に答える
0

比較関数を確認してください。2 か所で xmlhttp の代わりに xmlhttp1 を使用する必要があります

function comparison(inputString){
    xmlhttp1=new XMLHttpRequest();
    xmlhttp1.open("GET", "comparisondoc.txt", false);
    xmlhttp1.onreadystatechange=function() {
        if (xmlhttp1.readyState==4) {
            <!--alert(xmlhttp1.responseText)-->
            var compareString = xmlhttp1.responseText;
            alert(compareString)
            if(inputString==compareString){
                alert("Strings are equal");
            }
        }
    }
    xmlhttp1.send(null)
}
于 2012-12-07T11:29:56.733 に答える
0

if(xmlhttp.status == 200) { } のものを追加してみてください。これらは両方ともステータスの「AND」レディステートをループしていることに注意してください。

技術的には、どこかでエラーが発生している可能性があります (私はむしろ推測したくありません)。次のリクエストへの進行を停止したり、ステータスチェックなしで何かを停止したりする可能性があります。

また、他のリクエスト手法を「試す必要があります」。すなわち.. xmlhttp.onreadystatechange = function(){itsReady(inputString)}; // この行を短くして、ステータスと ReadyState のチェック、応答などの関数を含む別の関数への単純な呼び出しを行います。

通常の実行では、ループは次のようになります。 /ステータス200////////hirdySte:4///ステータス200////////

長い onreadystatechange = function (){ ... すべてのもの..} を試してみると、多くの奇妙な問題に遭遇しました。短い onreadystatechange テクニックを使用して、クレイジーな一連の要求機能を正常に実行しました。

最後の瞬間に気付きました-> 関数間で非同期フラグが異なる理由はありますか? よほどの理由がない限り、すべて true に設定します。

これは機能します: (テストするには: 2 ページの t1.php には num または何でも含まれ、t2.txt には funcs が呼び出されるため、sam dir に num が含まれます)

function source1(){
                                            var avar = 1;
                                                xmlhttp=new XMLHttpRequest();
                                                xmlhttp.open("GET", "t1.php",true); // shortened f-names for ease of test
                                                xmlhttp.onreadystatechange = function(){jsg_snd(avar)};
                                                xmlhttp.send(null)
}

function jsg_snd(avar){
    if (xmlhttp.readyState==4) {
        if (xmlhttp.status == 200) {
                                            var inputString = xmlhttp.responseText;
                                                document.getElementById('text_zone').innerHTML = inputString;
                                                document.getElementById('text_zone1').value = inputString;
                                                // alert(inputString);//
                                                comparison(inputString)
        }
    }
}

function comparison(inputString){
        xmlhttp1=new XMLHttpRequest();
                                                xmlhttp1.open("GET", "t2.txt", true);
                                                xmlhttp1.onreadystatechange= function(){jsg_snd1(inputString);};
                                                xmlhttp1.send(null)
}

function jsg_snd1(inputString){
    if (xmlhttp1.readyState==4) {
        if (xmlhttp1.status == 200) {
                                            var compareString = xmlhttp1.responseText;
                                                        //alert(compareString)
            if(inputString==compareString){
                                                        //alert("Strings are equal");
                                                document.getElementById('text_zone').innerHTML += "; Ok "+inputString+"=="+compareString+"";
            }
        }
    }
}

これで、本文の html は次のようになります。

    <tt id = 'text_go' onMouseUp="source1();" >Go!</tt>
    <tt id = 'text_zone' onMouseUp="text_zone.innerHTML = '';" >Click to clear!</tt>
    <input type ='text' id = 'text_zone1' onMouseUp="text_zone1.value = '';" value = 'Click to clear!' >

余分なものは_ __s & クスクス用です。

于 2013-04-23T18:32:39.283 に答える