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