вызов CORS API с использованием java скрипта и прокси. php в чем может быть ошибка в коде? - PullRequest
0 голосов
/ 19 апреля 2020

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>

прокси. 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 = xmlDo c .getElementsByTagName ("Scan_Detail «); в html java файле сценария

код предполагает отображение файла данных междоменной области XML. Что может быть не так? с использованием плагина CORS chrome и без использования скрипта php java этот код работает нормально, но мне нужно запустить код скрипта java с использованием файла php и без использования какого-либо плагина. Ранний ответ приветствуется. Спасибо.

1 Ответ

0 голосов
/ 19 апреля 2020

Вместо того, чтобы усложнять ситуацию с помощью скрипта proxy, вы можете использовать API Fetch и дать ему команду выполнить запрос CORS напрямую - API Fetch очень прост в использовании, что является бонусом.

Когда вы смотрите на документацию , это может показаться немного сложным, если вы знакомы с простотой вызовов 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...