2016-04-07 9 views
0

クロスドメインの「問題」を回避するために、PHPプロキシ経由でAjax呼び出しを実行して、別のドメインのサーバーからXMLを受信して​​います。 XMLノードからHTMLタグに値を取得しません。ブラウザコンソールにエラーはありません。 Firebugでは、ResponseとXMLの両方の列でXMLデータが正常に表示されます。完全なコード:受け取ったXMLデータの解析文字列内のXMLノードにアクセスします。

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8" /> 
</head> 
<body> 
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
<h2>Flightinfo</h2> 

<button type="button" onclick="loadXMLDoc()"> 
Get Flight ID</button> 

<p id="fid"></p> 

<script> 
function loadXMLDoc() { 
jQuery(document).ready(function($) { 
    $.ajax({ 
    url: "http://d2f.no/flightinfo/proxy.php", 
    type: "POST", 
    data: { 
     address: "http://flydata.avinor.no/XmlFeed.asp?TimeFrom=1&TimeTo=7&airport=OSL&direction=D&lastUpdate=2016-03-10T15:03:00Z" 
    }, 

    success: function myFunction(xml) { 

    var x, i, xmlDoc, txt, parser; 
    parser = new DOMParser(); // new Parser 
    xmlDoc = parser.parseFromString(xmlDoc,"text/xml"); // Parse string 
    txt = ""; 
    x = xmlDoc.getElementsByTagName("flight_id"); 
    for (i = 0; i< x.length; i++) { 
    txt += x[i].childNodes[0].nodeValue + "<br>"; 
    } 

    document.getElementById("fid").innerHTML = txt; 

} 

    }); 
}); 
} 
</script> 
</body> 
</html> 

パーツ:

<airport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://flydata.avinor.no/XmlFeed.xsd" name="OSL"> 
<flights lastUpdate="2016-04-07T00:37:16Z"> 
<flight uniqueID="5760860"> 
<airline>OSL</airline> 
<flight_id>OSL424</flight_id> 
<dom_int>D</dom_int> 
<schedule_time>2016-03-10T10:15:00Z</schedule_time> 
<arr_dep>D</arr_dep> 
<airport>BDU</airport> 
<gate>PAD</gate> 
</flight> 
<flight uniqueID="5758058"> 
<airline>AC</airline> 
<flight_id>AC6377</flight_id> 
<dom_int>S</dom_int> 
<schedule_time>2016-03-11T05:30:00Z</schedule_time> 
<arr_dep>D</arr_dep> 
<airport>BRU</airport> 
<check_in>10</check_in> 
</flight> 

Link to XML feed

私はここで何をしないのですか?ここで

+0

AJAXリクエストで 'dataType'を' 'XML''に設定しただけではどうでしょうか? jQueryを使用してループすることができます。 '$ .parseXML(xml).find( 'flight_id')。それぞれ(function(i、e){doSomething(e)});' – user2410532

答えて

0

は合理的なアプローチ、より多くのjQueryの方法です:

xmlDoc = parser.parseFromString(xmlDoc,"text/xml"); // Parse string 

二回XMLDOCを使用しています:あなたのコード内

<button type="button" id="load_btn">Get Flight IDs</button> 

<p id="fid"></p> 

<script> 
$(document).ready(function() { 
    $('#load_btn').click(function() { 
     loadXMLDoc(); 
    }); 
}); 

function loadXMLDoc() { 

    $.ajax({ 
     url: "http://d2f.no/flightinfo/proxy.php", 
     type: "POST", 
     dataType: "xml", 
     data: { 
      address: "http://flydata.avinor.no/XmlFeed.asp?TimeFrom=1&TimeTo=7&airport=OSL&direction=D&lastUpdate=2016-03-10T15:03:00Z" 
     }, 

    }) 

    .done(function (xml) { 

     var ids = $(xml).find('flight_id'); 

     var txt = ""; 
     $.each(ids, function(index) { 
      txt += ids[index].textContent + "<br>"; 
     }); 
     $('#fid').html(txt); 
    }); 
} 
</script> 

一つの問題は、ラインでした。私はあなたはそれがあることを意味し信じる:

xmlDoc = parser.parseFromString(xml,"text/xml"); // Parse string 

また、jQueryの1.8、success has been deprecatedのようの.doneの賛成で。

+0

これはちょうど優れています、larsAnders! Tusen takk! – user3434120