2016-04-04 13 views
0

Diese Frage erneut posten, da der Code dieses Mal komplett anders ist.Get XML von Server mit Ajax GET

Der Versuch, Fluginformationen im XML-Format von Avinor (norwegische Luftfahrtbehörden) zu erhalten. Beispiel für eine Abfrage: http://flydata.avinor.no/XmlFeed.asp?TimeFrom=1&TimeTo=7&airport=OSL&direction=D&lastUpdate=2016-04-04T15:03:00Z

Ich habe eine Ajax-GET-Abfrage erstellt, um den XML-Feed mit id = flights in mein html p zu parsen, aber ohne Erfolg. Ich erhalte diese Fehler in Firebug-Konsole:

Syntax: erwartete Ausdruck erwartet, '<'

Firebug-> Net-> Headers zeigt Folgendes an:

Response headers 
Cache-Control private 
Content-Length 28088 
Content-Type text/xml; Charset=iso-8859-1 
Date Mon, 04 Apr 2016 18:32:07 GMT 
Server Microsoft-IIS/7.0 
X-Powered-By ASP.NET 

Request headers 
Accept */* 
Accept-Encoding gzip, deflate 
Accept-Language en-US,en;q=0.5 
Connection keep-alive 
Host flydata.avinor.no 
User-Agent Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0 

Wenn ich in Firebug gehen -> Net-> XML, ich kann die XML-Daten gut sehen. Kann mir bitte jemand helfen, das herauszufinden?

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

<button type="button" onclick="loadFlights()"> 
Get Flights</button> 

<p id="flights"></p> 

<script> 

function loadFlights() { 

var url = "http://flydata.avinor.no/XmlFeed.asp?TimeFrom=1&TimeTo=7&airport=OSL&direction=D&lastUpdate=2016-04-04T15:03:00Z"; 
    $.ajax({ 
    url: url, 
    type: "GET", 
    dataType: "jsonp", 
    success: function myFunction(xml) { 
    var x, i, xmlDoc, txt; 
    xmlDoc = xml.responseXML; 
    txt = ""; 
    x = xmlDoc.getElementsByTagName("flight_id"); 
    for (i = 0; i< x.length; i++) { 
    txt += x[i].childNodes[0].nodeValue + "<br>"; 
    } 
    document.getElementById("flights").innerHTML = txt; 
} 
    }); 
}; 

</script> 

</body> 
</html> 
+0

Wenn Ihr dataType jsonp ist, sollte Ihre URL auf eine JavaScript-Datei und nicht auf eine XML-Datei verweisen. BTW SOP wäre völlig nutzlos, wenn Sie es mit einer einzigen Codezeile umgehen könnten. – Musa

Antwort

1

Sie suchen JSONP fragen - was AJAX würde akzeptieren, weil gepolsterte JSON das einzige, was Sie Cross-Domain mit einem AJAX-Aufruf bekommen. Sie erhalten JSON jedoch nicht zurück; Sie erhalten XML. Und um das Ganze noch interessanter zu machen, versuchen Sie es als HTML zu parsen.

Von another SE answer.

Finally, let's move onto the main question: Can JSONP be used to fetch XML, or can we parse XML cross-domain? The answer, as others have pointed out, is a resounding NO

Sie sind also Glück dort. Es tut uns leid.

+0

Ich sehe. AJAX-Aufruf funktioniert nicht, da CORS nicht serverseitig implementiert ist. Was ich nicht verstehe, ist, dass ich die XML-Daten, die ich vom Server in Firebug erhalte, sehen kann, mit der rechten Maustaste klicke und sie als den vorgeschlagenen Dateinamen (XmlFeed.asp.xml) speichern. In meinem Kopf bedeutet das, dass ich die angeforderten XML-Daten an meinen Computer gesendet habe. – user3434120

+0

@ user3434120 Oh es ist nicht, dass der * Anruf * nicht gemacht wird. Aber der Parser erwartet JSONP, also wenn es XML stattdessen bekommt, wird es natürlich verärgert und schmilzt einen großen Schmoll. Das große Problem für Sie ist natürlich, dass JSONP das einzige ist, was Sie domainübergreifend anfordern können. – MichaelK

+0

Danke für die Klärung, Michael. Ich habe es mit einem getJSON-Anruf versucht, den Dienst bei AnyOrigin benutzt, und es hat funktioniert. Frage mich, wie sie es machen ... :-) – user3434120