2017-01-18 1 views
0

私のPHPファイルはデータベースを介してXMLを生成します。このファイルは動作しますが、問題はJavaScriptの部分にあります。AJAX/PHP/XML - JavaScriptを使用していくつかのデータを取得

状況:文字を入力すると、PHPで生成されたXMLからデータを取得できます。

PHP

<?php 
    $bdd = new mysqli("localhost", "root", "", "sommets"); 
    if ($bdd->connect_error) {die("Impossible de se connecter");} 
    $bdd->set_charset("utf-8"); 

    if (isset($_GET['recherche'])) { 
    $recherche = addslashes($_GET['recherche']); 
    $sql = "SELECT * from sommets where som_nom like '$recherche%'"; 
    $rec = $bdd->query($sql) or die($bdd->error); 
    header("Content-type: text/xml"); 
    echo("<sommets>"); 
    while ($row = $rec->fetch_object()) { 
     echo("<sommet altitude=\"{$row->som_altitude}\">"); 
     echo("<nom>{$row->som_nom}</nom>"); 
     echo("<region>{$row->som_nom}</region>"); 
     echo("</sommet>"); 
    } 
    echo("</sommets>"); 
} 
?> 

Javascriptを

<input type="text" name="r" id="recherche"/> 
<div id="nom"></div> 
<script> 
    document.getElementById('recherche').addEventListener('keyup', function(){ 
    var nom = document.getElementById("nom"); 
    nom.innerHTML = ""; 
    var xhr = new XMLHttpRequest(); 
    xhr.onreadystatechange = function() { 
    if (xhr.readyState<4) return; 
    var resultatsXML = xhr.responseXML.getElementsByTagName("sommets"); 
    if(resultatsXML.length > 0){ 
    for (var i=0; i<resultatsXML.length; i++) { 
    var nom_sommet = resultatsXML[i].getElementsByTagName("nom")[i]. 
               childNodes[0].nodeValue; 
    document.getElementById("nom").innerHTML += nom_sommet[i] 
              .childNodes[0].nodeValue; 
    } 
} 
} 
var r = document.getElementById("recherche").value; 
    if(r != ""){ 
    xhr.open("GET", "TP09_AJAX_XML.php?recherche="+r); 
    xhr.send(); 
    } else { nom.innerHTML = ""; } 
    }); 

私はこのエラーがあります:0123」と

Uncaught TypeError: Cannot read property '0' of undefined 

またはそれを"または" nodeValue "となります。 PHPで生成されたXMLから一括弧を読みたいだけです。

アイデアはありますか?

+0

'.childNodes [0]' 'ツリーと.childNodesではありません[0] .childNodes'は後に' .nodeValue'を入手するには、すぐに定義されていません

resultatsXML[i].getElementsByTagName("nom")[0]から.nodeValueを取得する
resultatsXML[i].getElementsByTagName("nom")[0] 

'childNodes [0]' – Beginner

答えて

0

まず、xhr.responseXML.getElementsByTagNameを使用する場合は、「sommet」ではなく「sommet」を使用します。

第2に、resultatsXML[i].getElementsByTagName("nom")[i]は、resultatsXMLの変数igetElementsByTagNameの結果を使用しています。 、最初のポイントとして、resultatsXML[i]は「ソメット」、含まれている場合は、よりあなたの例に従って、getElementsByTagNameは、唯一のXMLタグを返しますので、しなければならない:私は問題を正しく理解していなかった場合

var resultatsXML = xhr.responseXML.getElementsByTagName("sommet"); 
if(resultatsXML.length > 0){ 
    for (var i=0; i<resultatsXML.length; i++) { 
     var nom_sommet = resultatsXML[i].getElementsByTagName("nom")[0].nodeValue; 
     document.getElementById("nom").innerHTML += nom_sommet; 
    } 
} 

は私を修正します。

0

Uncaught TypeError: Cannot read property '0' of undefined

resultatsXML[i].getElementsByTagName("nom")[i] 

が木ではないので

resultatsXML[i].getElementsByTagName("nom")[i].childNodes 

が未定義であることを意味それに加えて、あなたは単一の値のみが

[0]

[i]を変更する必要がありただemediately
var nom_sommet = resultatsXML[i].getElementsByTagName("nom")[0].nodeValue; 
document.getElementById("nom").innerHTML += nom_sommet; 
関連する問題