Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用java脚本和proxy.php调用CORS API代码中会出现什么错误?_Javascript_Php_Html - Fatal编程技术网

Javascript 使用java脚本和proxy.php调用CORS API代码中会出现什么错误?

Javascript 使用java脚本和proxy.php调用CORS API代码中会出现什么错误?,javascript,php,html,Javascript,Php,Html,java脚本代码 <!DOCTYPE html> <html> <style> table,th,td { border : 1px solid black; border-collapse: collapse; } th,td { padding: 5px; } </style> <body> <button type="button" onclick="loadXMLDoc()">Show Details&

java脚本代码

<!DOCTYPE html>
<html>
<style>
table,th,td {
  border : 1px solid black;
  border-collapse: collapse;
}
th,td {
  padding: 5px;
}
</style>
<body>

<button type="button" onclick="loadXMLDoc()">Show Details</button>
<br><br>
<table id="demo"></table>

<script>

function loadXMLDoc() {
  var xmlhttp = new XMLHttpRequest();
  xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
     // xmlDoc=xmlhttp.responseXML; //
      myFunction(this);
    }
  };

  xmlhttp.open("GET", "proxy.php?a=pjm", true);
  //https://crossorigin.me/
  //&callback=? 

  //xmlhttp.open("GET", "http://db1.SITENAME.com:8080/WEB_API/awb_ref_query.asmx/awb_ref_query_xml?str_awb_refno=160230230&str_awb_refno_type=AWB&str_userid=testapi&str_pwd=testapi", true);
  alert("zero");


  xmlhttp.send();

}
function myFunction(xml) {
  var i;
  alert("first");

 var xmlDoc = xml.responseXML;
  alert("second");
  var table="<tr><th>Progress</th><th>Scan_Detail</th></tr>";
  alert("third");
  document.addEventListener("DOMContentLoaded", function(){
    alert(listLength());
});
   var x = xmlDoc.getElementsByTagName("Scan_Detail");
  alert("fourth");

  for (i = 0; i <x.length; i++) { 

    table += "<tr><td>" +
    x[i].getElementsByTagName("Progress")[0].childNodes[0].nodeValue +
    "</td><td>" +
    x[i].getElementsByTagName("Delivered_Undelivered")[0].childNodes[0].nodeValue +
    "</td></tr>";

  }
  alert("fifth");
  document.getElementById("demo").innerHTML = table;
  alert("sixth");
}

</script>

</body>
</html>

表,th,td{
边框:1px纯黑;
边界塌陷:塌陷;
}
th,td{
填充物:5px;
}
显示细节


函数loadXMLDoc(){ var xmlhttp=new XMLHttpRequest(); xmlhttp.onreadystatechange=函数(){ if(this.readyState==4&&this.status==200){ //xmlDoc=xmlhttp.responseXML// 我的职能(本); } }; open(“GET”,“proxy.php?a=pjm”,true); //https://crossorigin.me/ //&回调=? //open(“GET”http://db1.SITENAME.com:8080/WEB_API/awb_ref_query.asmx/awb_ref_query_xml?str_awb_refno=160230230&str_awb_refno_type=AWB&str_userid=testapi&str_pwd=testapi“,对); 警报(“零”); xmlhttp.send(); } 函数myFunction(xml){ var i; 警报(“第一”); var xmlDoc=xml.responseXML; 警报(“第二”); var table=“ProgressScan\u Detail”; 警报(“第三”); document.addEventListener(“DOMContentLoaded”,function()){ 警报(listLength()); }); var x=xmlDoc.getElementsByTagName(“扫描详细信息”); 警报(“第四”);
对于(i=0;i而言,您可以使用
Fetch
api并指示它直接执行
CORS
请求,
Fetch
api也非常易于使用,这是一个额外的好处

如果您熟悉XMLHttpRequest调用的简单性,那么当您查看时,可能会觉得有点令人畏惧,但这是值得的,因为基于
的方法论是前进的方向

此代码适用于已知url,但无法针对您的端点进行测试

<!DOCTYPE html>
<html lang='en'>
    <head>
        <meta charset='utf-8' />
        <title>Fetch & Parse XML</title>
        <script>
            document.addEventListener('DOMContentLoaded',()=>{
                const url='http://db1.SITENAME.com:8080/WEB_API/awb_ref_query.asmx/awb_ref_query_xml?str_awb_refno=160230230&str_awb_refno_type=AWB&str_userid=testapi&str_pwd=testapi';

                const config={
                    mode:'cors',
                    credentials:'omit',
                    cache:'default',
                    redirect:'follow'
                };

                const callback=function(r){
                    let oParser=new DOMParser();
                    let data=oParser.parseFromString( r, 'text/xml' );

                    /* do something with the parsed XML document... */
                    console.info( data );
                };


                fetch( url, config ).then( response => {
                    return response.text();
                }).then( xml => {
                    callback( xml )
                }).catch( error => {
                    alert( error )
                })
            });
        </script>
    </head>
    <body>
        <!-- content -->
    </body>
</html>

获取和解析XML
document.addEventListener('DOMContentLoaded',()=>{
常量url=http://db1.SITENAME.com:8080/WEB_API/awb_ref_query.asmx/awb_ref_query_xml?str_awb_refno=160230230&str_awb_refno_type=AWB&str_userid=testapi&str_pwd=testapi';
常量配置={
模式:'cors',
凭证:'省略',
缓存:'default',
重定向:'follow'
};
常量回调=函数(r){
让oParser=newdomparser();
让data=oParser.parseFromString(r'text/xml');
/*对已解析的XML文档执行某些操作*/
控制台信息(数据);
};
获取(url,配置)。然后(响应=>{
返回response.text();
}).then(xml=>{
回调(xml)
}).catch(错误=>{
警报(错误)
})
});

devtools控制台中浏览器记录的确切错误消息是什么?为什么不使用
fetch
api?您可以轻松地发送这样的跨域请求,而无需中介
proxy.php
scripterror位于'''''var x=xmlDoc.getElementsByTagName(“扫描详细信息”);在html java脚本文件中@sideshowbarkererror is-error typeerror:无法读取null@sideshowbarkerThanks的属性'getelementsbytagname'以获得即时响应。我会检查并让您知道。@RamRaiderI使用了const url='';它给出了typeerror:无法获取。请引导。感谢@RamRaiderI如果您在浏览器中加载该页面,但查看控制台(特别是在网络请求时)查看
响应
标题,您会注意到没有
访问控制允许来源
标题…如果没有此跨域请求,使用javascript将无法工作。您的问题涉及
CORS api
,这表明特定端点与
获取
一样可用于CORS请求emote站点没有将
Access Control Allow Origin
头设置为
*
(全部),那么XMLHttpRequest&Fetch将不起作用-在这种情况下,您的
代理
想法可能是可行的,但使用
curl
并为端点设置合适的选项(即:ssl、cookies、useragent等)您可以尝试将配置中的
mode
选项从
cors
设置为
no cors
,以访问该XML文件
<!DOCTYPE html>
<html lang='en'>
    <head>
        <meta charset='utf-8' />
        <title>Fetch & Parse XML</title>
        <script>
            document.addEventListener('DOMContentLoaded',()=>{
                const url='http://db1.SITENAME.com:8080/WEB_API/awb_ref_query.asmx/awb_ref_query_xml?str_awb_refno=160230230&str_awb_refno_type=AWB&str_userid=testapi&str_pwd=testapi';

                const config={
                    mode:'cors',
                    credentials:'omit',
                    cache:'default',
                    redirect:'follow'
                };

                const callback=function(r){
                    let oParser=new DOMParser();
                    let data=oParser.parseFromString( r, 'text/xml' );

                    /* do something with the parsed XML document... */
                    console.info( data );
                };


                fetch( url, config ).then( response => {
                    return response.text();
                }).then( xml => {
                    callback( xml )
                }).catch( error => {
                    alert( error )
                })
            });
        </script>
    </head>
    <body>
        <!-- content -->
    </body>
</html>