使用java脚本和proxy.php调用CORS API代码中的错误是什么



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>

proxy.php代码

<?php
//set your return content type
header('Content-type: application/xml');
$c = $_GET['a'];
if($c=="pjm"){
$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';
// $url = 'https://www.w3schools.com/xml/guestbook.asp';
}
//get that website content
$handle = fopen($url,"r");
//if there is something read and return
if($handle) {
while(!feof($handle)) {
$buffer = fgets($handle, 4096);
echo $buffer;
}
fclose($handle);
}

?>

错误在'''var x=xmlDoc.getElementsByTagName("Scan_Detail"(;html中的java脚本文件

代码假设显示跨域XML数据文件。可能出了什么问题?使用CORS-chrome插件而不使用php-java脚本,此代码运行良好,但我必须使用php文件而不使用任何插件来运行java脚本代码。欢迎尽早作出回应。谢谢

您可以使用Fetchapi并指示它直接执行CORS请求,而不是使proxy脚本的问题复杂化-Fetchapi也非常易于使用,这是一个额外的好处。

当您查看文档时,如果您熟悉XMLHttpRequest调用的简单性,它可能会显得有点令人生畏,但这是值得的,因为整个基于Promise的方法论是前进的方向。

此代码适用于已知的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>

最新更新