2010-06-18 9 views
9

Ich versuche, XML in eine Webseite von einem anderen Server zu lesen, und ich nehme an, dass mein Problem Same-Origin Policy und daher ein Cross-Domain-Problem ist.Verwenden Sie Jsonp, um xml Cross-Domäne zu erhalten

Ich habe ein bisschen googeln und es scheint, dass Jsonp der Weg nach vorne ist. Basierend auf einigen Beispielen habe ich hier auf Stackoverflow und anderen Seiten gefunden, das ist was ich habe, und es "trifft" nicht den Server mit dem XML. Ich kann die XML in einem Browser anzeigen.

$(document).ready(function(){  
    $.ajax({ 
     type: 'GET', 
     dataType: 'jsonp',     
     url: 'http://192.168.0.106:8111/getconfiguration?', 
     success: function (xml) 
     { //do stuff with received xml 
     }});  

Irgendwelche Vorschläge? Bitte beachten Sie, dass ich ein Neuling in Bezug auf JS/JQuery bin; o)

Antwort

1

Wenn Sie Zugriff auf Code haben, der das XML auf dem Remote-Server generiert, können Sie das Ganze in JSONP einpacken.

JSONP ist eine Möglichkeit, die Richtlinie für denselben Ursprung zu umgehen, indem Daten mithilfe von Tags <script> abgerufen werden und nicht versucht wird, Informationen aus der Ferne zu extrahieren.

in Ihrem getconfiguation Skript, würden Sie so etwas wie

callback("SERVER GENERATED XML/JSON DATA GOES HERE"); 

wo der Rückruf durch den Remote-Aufruf angegeben wird

Zum Beispiel haben, wenn Ihr Remote-Skript php war, würden Sie es etwas aussehen wie folgt:

<?php 
// getconfiguration.php 
echo "$_GET['callback']($configuration_data);" 
?> 

Dann machen Sie laufen AJAX Sie in Ihrer Frage zur Verfügung gestellt. Was dies tatsächlich tut, wird dynamisch ein Skript-Tag in eine Seite einfügen wie folgt aus:

<script src="http://192.168.0.106:8111/getconfiguation.php?callback=???"></script> 

jquery füllt die ??? für Sie mit einigen einzigartigen Wrapper generiert es für Ihren Erfolg Rückruf

+1

Was ist, wenn Sie keinen Zugriff darauf haben? Sie können Daten nur im XML-Format senden/empfangen. – crosenblum

+1

Wenn der Server nicht eingerichtet ist, um domänenübergreifende, clientseitige und JavaScript-Interaktionen zu handhaben, können Sie dies nicht erzwingen. Es gibt verschiedene Arbeitsumgebungen, die einen Proxy auf Ihrem Server, Flash oder Java Applets verwenden. –

3

Wenn Sie keinen Zugriff auf den Server haben (wenn Sie zum Beispiel eine API verbrauchen) können Sie YQL verwenden, um Ihre XML in Jsonp zu konvertieren und Abfrage des Yahoo-Servers über den Browser unter Verwendung einer benutzerdefinierten YQL-URL (in die eine SQL-ähnliche Anweisung eingebettet ist). Hier ist ein Beispiel (für die Zillow API):

$('document').ready(function(){ 
    $.ajax({ 
    url: 'http://query.yahooapis.com/v1/public/yql?q=select * from zillow.search where address = "1835 73rd Ave NE" and citystatezip = "98039" and zwsid = "X1-ZWz1cse68iatcb_13bwv"&format=json&diagnostics=true&env=http://datatables.org/alltables.env&callback=mydata', 
    jsonpCallback: "mydata", 
    success: function(results) { 
     console.log(results.query.results.searchresults.response.results.result.zpid); 
    }, 
    dataType: 'jsonp' 
    }); 
}); 
Verwandte Themen