Wenn Sie eine AJAX-Anfrage auf einer Website durchführen, muss die angeforderte URL auf derselben Domäne liegen wie die Domäne, von der aus die Anfrage gestellt wurde. Dies ist eine vom Browser auferlegte Sicherheitsbeschränkung. Es gibt einen Weg, dies zu umgehen, indem man einen Ansatz nach Art eines "Man-in-the-Middle" verwendet.
PHP ist eine serverseitige Sprache und hat die Fähigkeit, Inhalte von jeder URL abzurufen. Eine PHP-Datei kann also der "Man in the Middle" werden. Der Inhalt der PHP-Datei kann so eingerichtet werden, dass sie eine URL als Parameter akzeptiert und dann den Inhalt dieser URL zurückgibt.
<?php
echo file_get_contents($_GET['url']);
// WARNING: You REALLY should write something to whitelist or otherwise limit what the function will accept, or it could be a security danger to your server (people could read any file).
?>
Mit dieser Einrichtung können wir eine AJAX-Anfrage direkt an diese URL senden und dabei die URL, von der wir die Daten *eigentlich* wollen, als Parameter übergeben. Sehen Sie, wie wir "http://google.com" als Daten übergeben:
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js?ver=1.3.2'></script>
<script type='text/javascript'>
$(function() {
$.ajax({
type: "GET",
dataType: 'html',
data: 'url=http://google.com',
url: 'get.php',
success: function(data){
// Yah! Do something cool with data
},
error: function(){
// Boo! Handle the error.
}
});
});
</script>
Dies ist ein extrem einfaches Beispiel. Wenn Sie an einer robusteren Version interessiert sind, schauen Sie sich den Simple PHP Proxy an.
In Ordnung, bis jemand es ausnutzt, um jede Datei auf Ihrer Festplatte zu lesen und schnell Lücken findet.
Das ist ein schwerwiegender Fehler, und dieses Snippet sollte entfernt werden.
James Padolsey hat ein cooles Cross-Domain-AJAX-Mod für jQuery erstellt. Es verwendet YQL, was uns ermöglicht, Cross-Domain-GET-Anfragen zu stellen.
http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/