0

我对 Web 开发领域相当陌生,我正在尝试在 Internet Explorer 8 中读取一个 txt 文件,并将其与网站的源代码进行比较,看看它们是否相等。这样我就可以确定网页是否正常运行。

我设法使用 xmlhttprequest 获取源代码,并尝试了相同的方法来获取文本文件(与我的网页在同一个域中),但我收到了拒绝访问错误。

经过一些研究,我可以看到跨域 xmlhttprequests 不起作用,但这不是我想要做的,所以我不知道如何继续。

在 Firefox(当前版本)中运行相同的代码。它将读取文件而不是网页!

我不介意我最终使用的两个浏览器中的哪一个,但目前每个浏览器都做了我想要的一半。

我的代码是:

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 中打开,或者为什么网站源代码在 Firefox 中显示为空白(在警报中)。任何帮助,将不胜感激。

4

3 回答 3

0

尝试添加 if(xmlhttp.status == 200) { } 东西。请记住,这两个都在循环状态“与”就绪状态。

从技术上讲,您可能在某处出错(我不想推测)停止下一个请求的进度或任何没有状态检查的情况。

此外,您“应该”尝试其他请求技术。即.. xmlhttp.onreadystatechange = function(){itsReady(inputString)}; // 我们保持这一行简短而简单地调用另一个函数,其中包含您的状态和就绪状态检查、响应内容和更多函数。

在非常正常的运行中,循环看起来像: hi rdySte:1///status 0//////// hi rdySte:2///status 200//////// hi rdySte:3// /状态 200//////// hi rdySte:4///状态 200////////

我在尝试 long onreadystatechange = function (){ ... All stuff..} 时遇到了很多奇怪的问题,我使用 short onreadystatechange 技术成功地运行了一组疯狂的请求功能。

我在最后一分钟注意到-> 你的函数之间的异步标志不同是有原因的吗?除非您有充分的理由,否则我会将它们全部设置为 true。

这将起作用:(测试:2 页 t1.php 包含一个 num 或其他任何内容,并且 t2.txt 在 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 回答
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 个地方使用 xmlhttp1 而不是 xmlhttp

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 回答