2017-03-09 29 views
0

编辑:记得要经常检查您的网络选项卡中的错误,我上传的答案详解,这是一个愚蠢的问题,对我而言,由于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; 
 
}

+0

你在网络标签中看到了什么?在呼叫中没有错误处理程序的原因?有问题的浏览器? – epascarello

+0

叹息,这是尴尬。我从来没有想过要检查。我对网络编码比较陌生,并且一直忘记我有Web选项卡来查找错误。我的怀疑是正确的。我试图从中拉出的服务器没有Access-Control-Allow-Origin标志。 Welp,有时间询问合适的人是否可以改变。谢谢,epascarello。 –

回答

0

在网络选项卡中确认,其实也有找不到访问控制允许来源我试图访问服务器上的标志。我将不得不与正确的人交谈,看看能否改变。不过,如果这个代码可以改进,或者如果这里仍然存在问题,我不会看到请指出。

相关问题