编辑:记得要经常检查您的网络选项卡中的错误,我上传的答案详解,这是一个愚蠢的问题,对我而言,由于epascarello得到一个跨来源XMLHttpRequest来返回一个XML文件中的HTML5
我m为HTML5网站编写一些后端代码,我无法获得这个非常重要的功能。该网站通常需要从不同的服务器动态提取PHP生成的XML文件。我很确定该服务器具有Access-Control-Allow-Origin设置为允许来自此服务器的请求。我会与我的老板核实,但他已经出去了几天,说实话,这很可能是我做错了。有没有人看到这个代码有什么问题?
注意我在request.send(null)和之前的底部有一个提示。 .send()工作正常,如果我从同一个服务器请求一个XML文件,则函数完成,但如果我从另一个请求获取“之前”警报,但不是“之后”。我也看不到任何错误或其他警报显示给我。
注:
有全局变量和一些参考这样的其它.js文件。我已经确定包括他们会毫无意义,只是混淆了这个问题。
'cross'只是一个布尔值,表示请求是否是跨源,与另一个服务器。
function createXmlHttpRequestObject(cross) {
if(cross === undefined) {
cross = false;
}
var xmlHttp;
if(cross) {
if(window.XDomainRequest) {
try {
xmlHttp = new window.XDomainRequest();
} catch(e) {
xmlHttp = false;
}
} else {
xmlHttp = new XMLHttpRequest();
}
} else {
if(window.ActiveXObject) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
xmlHttp = false;
}
} else {
try {
xmlHttp = new XMLHttpRequest();
} catch(e) {
xmlHttp = false;
}
}
}
if(!xmlHttp) {
\t alert ("Error: CREATING XMLHTTP REQUEST OBJECT FAILED");
} else {
\t return xmlHttp;
}
}
//receives xml object from file
function getXmlObject(URL) {
//if url contains any of site root, then it is not cross domain
var cross = false;
if(!URL.includes(url_home)) {
cross = true;
}
var request = createXmlHttpRequestObject(cross);
var response;
if(window.ActiveXObject || window.XDomainRequest) {
request.onload = function(){
response = request.responseXML;
};
request.open('GET',URL,false);
request.send(null);
} else {
request.open('GET',URL,false);
request.onreadystatechange = function(){
if(request.readyState == 4) {
if(request.status == 200) {
response = request.responseXML;
} else {
var warn = 'NOT FOUND\n' + URL;
response = warn;
alert(warn);
}
}
};
alert("before");
request.send(null);
alert("after");
}
return response;
}
你在网络标签中看到了什么?在呼叫中没有错误处理程序的原因?有问题的浏览器? – epascarello
叹息,这是尴尬。我从来没有想过要检查。我对网络编码比较陌生,并且一直忘记我有Web选项卡来查找错误。我的怀疑是正确的。我试图从中拉出的服务器没有Access-Control-Allow-Origin标志。 Welp,有时间询问合适的人是否可以改变。谢谢,epascarello。 –