Szene
Wenn es zwei Server mit unterschiedlichen Domainnamen, A.com und B.Com gibt, in der Schnittstelle zwischen b.com/b_return_js.php können einige Daten erhalten werden. Wenn es sich auf der Seite von B.Com -Seite befindet, können Sie mit AJAX diese Schnittstelle direkt anfordern, aber was ist, wenn sie auf der A.com -Seite angefordert wird.
Schnittstellencode von b_return_js.php:
Die Codekopie lautet wie folgt:
$ a = array (
Array ('Benutzername' => 'Tony', 'Age' => 25),
Array ('Benutzername' => 'yimeng', 'Age' => 23),
Array ('Benutzername' => 'Ermeng', 'Alter' => 22),
Array ('Benutzername' => 'Sanmeng', 'Age' => 21),
);
Shuffle ($ A);
echo 'var userData =' .json_encode ($ a). ';'; // Wenn es sich um eine Site -Anfrage von b.com handelt, wird im Allgemeinen JSON_Encode ($ A) direkt zurückgegeben. Wenn Sie jedoch das SRC-Attribut verwenden möchten, um Cross-Domain zu erreichen, müssen wir diesen Wert einer JS-Variablen zuweisen, um sicherzustellen, dass diese Daten auf der Seite des Skript-Tags erhalten und verwendet werden können.
Einfache Implementierung
Es gibt eine einfache Möglichkeit, direkt auf der Seite unter A.com zu gehen
Die Codekopie lautet wie folgt:
<script src = "http://b.com/b_return_js.php"> </script>
Auf diese Weise können die in dieser Schnittstelle zurückgegebenen Daten direkt von der A.com -Seite erhalten werden.
Aber hier gibt es einen Fehler. Diese Daten können nur erhalten werden, wenn die Seite geladen wird. Wenn wir AJAX verwenden möchten, ist die Methode, die jederzeit neue Schnittstellendaten erhalten kann, nicht sehr geeignet. Wenn Sie beispielsweise auf eine Schaltfläche klicken, um Daten teilweise über diese Schnittstelle aktualisiert zu werden, ist diese Methode etwas unangemessen.
Klasse AJAX -Implementierung
Tatsächlich besteht die Idee, die oben erwähnte AJAX -Klasse zu implementieren, das obige Tag zu regenerieren, wenn die AJAX -Bedingung ausgelöst wird, um Daten von der Schnittstelle erneut zu erhalten. Tatsächlich ist es jedoch immer noch ein wenig schwierig zu implementieren (zumindest hat es mir viel Mühe gemacht).
Auf Code:
Wenn sich unter der Seite A.com/Scriptsrc.php eine Schaltfläche befindet
<input type = "button" id = "ajax_request_from_b" value = "Anfrage von b.com"/>
Jedes Klick wird Daten von der Schnittstelle zwischen b.com/b_return_js.php erhalten, ähnlich wie bei AJAX -Implementierungscode:
Die Codekopie lautet wie folgt:
Funktion createscript ()
{
//console.log(ee);
ele.src = 'http://b.com/b_return_js.php';
ele.type = 'text/javaScript';
ele.language = 'JavaScript';
}
Funktion getData ()
{
console.log (userData);
}
$ ('#ajax_request_from_b'). click (function () {
// Das Skript-Tag muss jedes Mal neu geladen werden, sodass jedes Mal ein neues Skript-Tag regeneriert werden muss, um sicherzustellen, dass Daten aus dem Cross-Domain-Server erhalten werden können.
if (ele && ele.parentnode)
{
//ele.parentnode.removechild(ele); // Diese Art von Löschen kann ELE nicht vollständig aus dem Speicher löschen, sondern nur den Ort im DOM entfernen
für (var Eigenschaft in ele) {
Ele [Eigentum] löschen; // vollständig löschen
}
}
ele = document.createelement ('script'); // Dies ist ein neuer ELE
createScript ();
document.getElementsByTagName ("head") [0] .AppendChild (ele);
ele.onload = function () {getData ()}; // Die Benutzerdata kann nach dem Laden des Skriptelements erhalten werden. Jedes Mal, wenn die Benutzerinformationen in einer zufälligen Reihenfolge erhalten werden.
});
Auf diese Weise erhalten Sie jedes Mal, wenn Sie auf die Schaltfläche klicken, die Daten erneut von der Schnittstelle, und der Effekt ähnelt Ajax, aber dies ist eine Cross-Domänen-Methode von JS. Obwohl es ein bisschen undankbar ist, ist es immer noch eine Denkweise.