2016-12-12 16 views
0

私はbodyタグのonloadのイベントの下で上記のXMLコンテンツを読んでいる私のmain.phpページの下PHP SERVER属性がjavascriptの関数で機能していませんか?

<?php 
$path = trim(ReadData("data_file_path")); 
$speed_data_file = $path . "speed"; 
$rmp_data_file = $path . "rpm"; 
$temp_data_file = $path . "temp"; 
$fuel_data_file = $path . "fuel"; 

header("Content-type: text/xml"); 
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'; 
echo '<table_info>'; 
    echo "<speed>"; 
     echo ReadData($speed_data_file); 
    echo "</speed>"; 

    echo "<rpm>"; 
     echo ReadData($rmp_data_file); 
    echo "</rpm>"; 

    echo "<temp>"; 
     echo ReadData($temp_data_file); 
    echo "</temp>"; 

    echo "<fuel>"; 
     echo ReadData($fuel_data_file); 
    echo "</fuel>"; 
echo '</table_info>'; 

function ReadData($filepath) 
{ 
    $data = file_get_contents($filepath) or null; 
    return $data; 
} 
?> 

を次のように私はxml.phpページを使用してXMLを生成しています。

... 
function Onload() 
{ 
    var xml_data_file = "http://" + "localhost" + "/demo/xml.php"; 
    loadXMLDoc(xml_data_file, function() {updateXMLtoElement()}); 
} 

function loadXMLDoc(url,cfunc) 
{ 
    if (window.XMLHttpRequest) { 

     // code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
    } 
    else { 

     // code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    xmlhttp.onreadystatechange=cfunc; 
    xmlhttp.open("GET",url,true); 
    xmlhttp.send(); 
} 

function updateXMLtoElement() 
{ 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) { 

     z = xmlhttp.responseXML; 

     if(z.getElementsByTagName("speed")[0].childNodes[0].nodeValue != null) { 
      document.getElementById("speed_dial").setAttribute("data-value", z.getElementsByTagName("speed")[0].childNodes[0].nodeValue); 
     } 

     if(z.getElementsByTagName("rpm")[0].childNodes[0].nodeValue != null) { 
      document.getElementById("rmp_dial").setAttribute("data-value", z.getElementsByTagName("rpm")[0].childNodes[0].nodeValue); 
     } 

     if(z.getElementsByTagName("temp")[0].childNodes[0].nodeValue != null) { 
      document.getElementById("temp_dial").setAttribute("data-value", z.getElementsByTagName("temp")[0].childNodes[0].nodeValue); 
     } 

     if(z.getElementsByTagName("fuel")[0].childNodes[0].nodeValue != null) { 
      document.getElementById("fuel_dial").setAttribute("data-value", z.getElementsByTagName("fuel")[0].childNodes[0].nodeValue); 
     } 
    } 
} 
... 

すべてうまく動作しますが、上記のコードを下の図のように変更しても機能しなくなります。クロームの「要素を検証」機能を使用して

function Onload() 
{  
    var xml_data_file = "http://" + "<?php echo $_SERVER['SERVER_ADDR'].":".$_SERVER['SERVER_PORT']; ?>" + "/demo/xml.php"; 
    loadXMLDoc(xml_data_file, function() {updateXMLtoElement()}); 
} 

両方が$ _SERVER [「SERVER_ADDRを」]属性と$ _SERVER [「SERVER_PORT」]​​ resplyと思われ、適切なサーバーのアドレスとポートに対応しています。だから何がうまくいかないの?

+0

の出力は「http://」です。 $ _ SERVER ['SERVER_ADDR']。$:SERVER ['SERVER_PORT']; – Ima

+0

"http://127.0.0.1:80/demo/xml.php"と私のブラウザでこのURLを実行すると、xmlがデータと共に生成されます。 –

+0

コンソールを調べて、javacriptエラーがないか確認できますか – Ima

答えて

1

通常、JavascriptファイルはPHPによって処理されません。範囲外の非常に堅実な理由があります。 <?php...の文字列は、javascriptでそのまま使用されますが、期待する値ではありません。

function Onload() 
{  
    var xml_data_file = "/demo/xml.php"; 
    loadXMLDoc(xml_data_file, function() {updateXMLtoElement()}); 
} 

スキーマ、ドメイン、および現在のページのポートを使用します:あなたが達成しようとしている何

はこの方法で行われるべきである「http://localhost/demo/xml.php」それはhttp://localhostに開放されたときに「http://example.com/demo/xml.php」ときhttp://example.comに開かれています。

+0

ありがとう...それは働いた。 –

関連する問題