Doohhh ... sorry, my bad! Ja, det virker i IE, men ikke i Firefox.
Skal du hente XML fra et et andet domæne i Firefox - og ikke har adgang til at ændre i XML-dokumentet - må du bruge din egen server som proxy. Du sender en XMLHttpRequest til din egen server, som så henter XML'en fra Nationalbanken og sender den tilbage til browseren.
Hvis din server understøtter PHP, kan du skrive et dokument 'currency.php', som ser sådan ud:
<?php
function getAllCurrencies() {
return @file_get_contents("
http://www.nationalbanken.dk/dndk/valuta.nsf/valuta.xml");
}
$error = $xml = false;
if (isset($_POST["contxt"])) {
switch ($_POST["contxt"]) {
case "getAllCurrencies":
$xml = getAllCurrencies();
if (!$xml || $xml=="") $error = "Unable to retrieve XML from remote site.";
break;
default:
$error = "Unknown ContextID: '".$_POST["contxt"]."'.";
}
}
else $error = "No ContextID supplied.";
if ($error) {
$xml = "<?xml version='1.0' encoding='utf-8'?>";
$xml .= "<data><error>".$error."</error></data>";
}
header("Content-Length: ".strlen($xml));
header("Content-Type: text/xml; charset=utf-8");
print $xml;
?>
Du kan så kalde denne fil med et HTML-dokument, der ser sådan ud:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "
http://www.w3.org/TR/html4/strict.dtd"><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
<script type="text/javascript">
/* XMLHttpRequest wrapper -
http://www.dengodekode.dk/artikler/ajax/xmlhttprequest_wrapper.php */
(function(){if(window.XMLHttpRequest)return;var o=null,s,a=["MSXML2.XMLHTTP.6.0", "MSXML2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];for(var i=0,j=a.length;i<j;s=a[i],i++){try{if(o=new ActiveXObject(s))break}catch(e){}}window.XMLHttpRequest=o?function(){return new ActiveXObject(s)}:null;o=null})();
function getXML() {
var oHttp = new XMLHttpRequest();
oHttp.open("post", "currency.php", true);
oHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
oHttp.onreadystatechange = function(){
if (oHttp.readyState<4) return;
parseXML(oHttp.responseXML);
oHttp = null;
};
oHttp.send("contxt=getAllCurrencies");
}
function parseXML(oXML) {
var aErrors = oXML.getElementsByTagName("error");
if (aErrors.length>0) return alert(aErrors[0].firstChild.nodeValue);
var oCur = oXML.getElementsByTagName("currency")[0];
document.getElementById("cur").firstChild.nodeValue = oCur.getAttribute("code")+" :: "+ oCur.getAttribute("desc")+" :: "+ oCur.getAttribute("rate");
}
window.onload = getXML;
</script>
</head>
<body>
<h1>Valuta</h1><br />
<p>Foerste element = <span id="cur"> </span><p>
</body>
</head>
</html>