2013-08-16 5 views
6

Noobie hier. Ich schreibe ein Clientskript, das eine XML-Datei aus einer anderen Domäne lesen muss. Ich habe versucht, JSONP zu verwenden. Ich bekomme eine Antwort von 200, aber der Client kann aus irgendeinem Grund nicht auf die zurückgegebenen Daten zugreifen. Ich zwei Fehler erhalten:Cross-Domain AJAX zu XML lesen

Resource interpreted as Script but transferred with MIME type text/xml 

und

Uncaught SyntaxError: Unexpected token < 

Hier ist der Code ist (ich die XML-URL entfernt haben, da es vertraulich):

$(document).ready(function() { 
    $.getJSON("urlOfFilecallback=?", function(data) { 
    console.log(data) 
}) 
}); 

Wenn ich versuche, um die Daten zu übertragen in der Konsole bekomme ich:

ReferenceError: data is not defined 

Wie kann ich das beheben? Muss ich einen Proxy verwenden?

Antwort

1

XML ist standardmäßig nicht für domänenübergreifende Anfragen zulässig.

Mit etwas serverseitiger Programmierung können Sie jedoch einen Proxy erstellen und die Daten in Ihrer eigenen Domäne laden und als XML ausgeben.

Weitere Informationen finden Sie in diesem Question

+1

BTW, ich glaube, IE8 und unteren nicht domänenübergreifende XHR-Anforderungen unterstützen, also ja, machen eine PHP-Skript – Alex

1

Wenn Sie den Zugriff auf die andere Domain Seite haben, können Sie auch diese Methode verwenden Cross Domain Request

15

Sie müssen keine eigenen Proxy schreiben. Sie können YQL verwenden, wenn Sie hier wollen, ist ein Beispiel dafür, wie:

//sample site that returns xml 
site = 'http://goo.gl/9iQWyG'; 


var yql = 'http://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent('select * from xml where url="' + site + '"') + '&format=xml&callback=?'; 

// Request that YSQL string, and run a callback function. 
// Pass a defined function to prevent cache-busting. 
$.getJSON(yql, function(data){ 
    console.log(data.results[0]); 
}); 

hier ist die jsfiddle Check console.log.

(Usage limits der Öffentlichkeit YQL API sind 2.000 Anfragen/Stunde pro IP)

+1

gibt es eine andere Art und Weise als mit yql? Ich glaube, es ist keine Schmiere für ein Geschäft für den Fall, dass sie Ihre IP oder Domain blockieren - es wird plötzlich untergehen! –

+0

in der Theorie können Sie Ihren eigenen Proxy-Server schreiben und erhalten genau das gleiche Ergebnis .. wahrscheinlich einfacher zu bedienen und zu implementieren .. aber ohne sie werden Sie immer, müssen auf 3rd-Party-Proxy-Server abhängen. – Shaunak

+0

danke für Ihre Antwort ... irgendwelche Vorschläge, wie wir unseren eigenen Proxy-Server erstellen? Danke vielmals! –