2010-03-09 9 views
8

Ich habe gerade angefangen, jQuery und AJAX zu lernen. Ich kann eine lokale Seite (auf meiner Festplatte) in ein div über jQuery.load() laden, aber externe Seiten scheinen nicht zu funktionieren. Ich habe sogar wireshark verwendet, um zu überprüfen, ob die Daten vom Server gesendet werden (ist es). Beispielcode ist unten:Kann ich Daten von einer externen Seite über AJAX laden?

<html> 
<head> 
    <script src='jquery-1.4.2.min.js'></script> 
    <script> 
     $(document).ready(function() { 
      // $('#test').load('localpage.htm'); works! 
      $('#test').load('http://www.google.com/'); // does not work! 
     }); 
    </script> 
</head> 
<body> 
<div id='test'></div> 
</body> 
</html> 

Ist es möglich, dies in erster Linie zu tun? Wenn das so ist, wie?

+0

ähnlicher Frage mit Antwort http://stackoverflow.com/questions/ 2217695/trying-to-use-json-mit-jquery/2217707 # 2217707 – yanoo

Antwort

0

Sie können Ajax nicht von einer anderen Domäne aus aufrufen. Überprüfen Sie JSON-Technik für diese

+0

JSON wird Ihnen hier nicht helfen, da es nur ein Format ist, um z Ajax ruft an.Auch hier trifft die gleiche Herkunftspolitik zu. –

+0

Er könnte sich auf JSONP beziehen. – SLaks

2

Sie laufen in die Same Origin Policy. Sie können mit AJAX nicht auf Daten von einer externen Domäne zugreifen, da dies als Sicherheitsrisiko gilt. Der Grund dafür ist, dass AJAX-Anfragen mit Cookies arbeiten, die vom Browser gespeichert werden. Wenn ich auf facebook.com zugreifen würde und Sie dort angemeldet wären, würde der Cookie gesendet und ich hätte Zugriff auf Ihre persönlichen Daten.

2

Aus Sicherheitsgründen können Sie mit AJAX keine Seite von einer anderen Domäne (oder einem anderen Protokoll oder Port) anfordern.

Stattdessen können Sie ein serverseitiges Skript auf Ihrem Server schreiben, um Anforderungen an eine andere Domäne weiterzuleiten. (Dies ist nicht möglich, wenn Sie eine Seite von einer file://-URL ausführen)

+0

Ich bin mir nicht sicher, ob Sie HTTP-Umleitung oder Proxying von 'Anfragen an eine andere Domäne weiterleiten '- ersteres würde nicht funktionieren, aber Weiterleitung wäre nicht der richtige Begriff für Letzteres. –

+0

@Andy: Ich meinte Proxying. Was ist das korrekte Verb? – SLaks

+0

Entschuldigung, ich bin nur wählerisch, wenn es wirklich keine Notwendigkeit gibt (Stress des Jobs, vielleicht? ;-)). Ich vermute, Forwarding könnte als ein Begriff verwendet werden, aber es hat mir einfach falsch gelesen und ich bin fast downgestimmt ;-) –

4

Sie können keine Ajax-Aufrufe an eine andere Domäne ausführen, aus der das Skript stammt.

Für so etwas tun, müssen Sie einen Proxy-Seite auf Ihrer eigenen Webseite, zB:

<script> 
    $(document).ready(function() { 
     $('#test').load('ajax/getgoogle.php'); 
    }); 
</script> 

getgoogle.php:

<?php 

echo file_get_contents("http://www.google.com/"); 

?> 
2

Ajax? Ja. XHR? No (es sei denn, der Browser implementiert Cross-site XHR, die noch nicht weit verbreitet ist).

Um die Daten mit Ajax ohne Verwendung von XHR zu erhalten, muss die externe Site die Daten in JSONP format bereitstellen.

Alternativ können Sie die Daten über ein serverseitiges Skript auf Ihrem Server weitergeben, sodass es vom selben Host stammt (soweit es JavaScript betrifft).

2

Nein, ist es nicht. Schauen Sie sich Same Origin Policy an. Die Website, die Sie anfordern möchten, müsste JSONP aktiviert haben, damit das funktioniert, und Sie würden eine cross-domain callback verwenden. Alternativ können Sie einen Proxy auf Ihrer eigenen Domain erstellen, der die Seite im Auftrag Ihrer Ajax-Anfrage ergreift.

1

Laden Sie diesen PHP-Skript, anstatt zu versuchen Website direkt

$filename = "http://www.sitename.com"; 
$handle = fopen($filename, "r"); 
if ($handle) 
{ 
    while (!feof($handle)) 
    { 
     $text .= fread($handle, 128); 
    } 
    fclose($handle); 
} 
print $text; 

bearbeiten zu laden: Oder einfach wie Gefolgsmann-Lösung mit file_get_contents

+0

Verwenden Sie cURL anstelle von fopen: http://stackoverflow.com/questions/636678/what-are-the-important-differences-between-using-fopenurl-and-curl-in-php/637693 – Quentin

Verwandte Themen