同一域xmlhttprequest访问被拒绝ie8

时间:2012-12-07 11:08:09

标签: javascript xmlhttprequest

我对网络开发世界还很陌生,我正试图在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中显示为空白(在警报中)。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分: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!");
}

答案 1 :(得分: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)
}

答案 2 :(得分:0)

尝试添加if(xmlhttp.status == 200){}内容。请记住,这两个循环通过状态'“AND”就绪状态。

从技术上讲,你可能会在某个地方出错(我宁愿不推测)暂停进度到下一个请求或没有状态检查的任何事情。

此外,您“应该”尝试其他请求技巧。 ie .. xmlhttp.onreadystatechange = function(){itsReady(inputString)}; //我们让这一行简短而简单地调用另一个包含你的状态和状态检查,响应内容和更多功能的func。

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

我遇到了很多奇怪的问题,尝试了很长的onreadystatechange = function(){...所有东西..}我使用简短的onreadystatechange技术成功运行了一组疯狂的请求功能。

我在最后一刻注意到了&gt;  你的func之间的异步标志有什么不同?除非你有充分的理由,否则我会把它们都归为真。

这将起作用:(测试:2页t1.php包含一个数字或其他和t2.dxt在sam目录中具有num,因为在中调用了func)

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!' >

额外的stuf适用于 _ __ s&amp;笑声。