1. Was ist Cross-Domain?
Da der Browser aus Sicherheitsgründen die gleichorientierten Richtlinienbeschränkungen annimmt, kann JQuery keine direkten Objekte oder Daten über Domain-Namen hinweg betreiben. Zum Beispiel: A.com
Die A.html -Seite kann die Objekte oder Daten der b.html -Seite unter dem Domain -Namen von B.com mit JQuery und standardmäßig nicht betrieben werden.
Das Objekt oder die Daten von test.html. Solange JQuery die folgenden Bedingungen erfüllt, wird es als Cross-Domain-Name angesehen:
1. Die Hauptdomäne ist die gleiche
2. Der Domain -Name ist der gleiche, aber die Ports sind unterschiedlich, wie z. B. xxx.aaa.com:8000 und xxx.aaa.com
3. Der Domain -Name ist der gleiche, aber das Protokoll ist anders, wie http://www.aaa.com/ und https://www.aaa.com/
Nur wenn das Protokoll, der Domain-Name und der Port genau das gleiche JQuery sind, wird als kein Cross-Domain-Name angesehen.
2. Lösung für JQuery Cross-Domain Name Operation Objection
1. Die Situation der ersten Ankunft des Domain-Namens der obersten Ebene
Standardmäßig kann die A.html -Seite unter dem Namen der A.com -Domänen den test.html -Objekt oder die Daten unter dem test..com -Domänennamen mit JQuery nicht bedienen. Aber für die gleiche Situation wie die Top-Level-Domain-Namen, das Dokument zurücksetzen.
2. Die Situation, in der die Domain-Namen der obersten Ebene unterschiedlich sind
Es gibt zwei Methoden für die A.HTML -Seite unter dem Namen A.com Domain, $ .getJson und $.
(1) Cross-Domain über JQuery's Ajax, das tatsächlich mit der JSONP-Methode implementiert wird.
JSONP ist die Abkürzung von JSON mit Polsterung auf Englisch. Es ermöglicht die Erzeugung von Skript -Tags auf der Serverseite, zum Client zurückzukehren, dh javaScript -Tags generiert.
Das Lesen von Daten wird durch die Form des JavaScript -Rückrufs realisiert.
Beispielcode für HTML -Seitenseite:
Der Code ist wie folgt:
// Zunächst müssen Sie Jquerys jQuery (document) .ready (function () {$ .ajax ({type: "get", // Jquey nicht unterstützt, die Post-Methode Cross-Domain Async: False, Url: "http://api.Vevb.com/apitools/ajaxs/ajaxs/ajaxs/ajax_props.do.do.do.do.Do.Do.Do.Do.Do.Do.DoPs.do", // // // // // // //.hurdomains/ajaxs/ajax_Props.do. "JSONP", // in den Anforderungshandler eingefügt, um den Parameternamen des JsonP-Rückruffunktionsnamens (Standard: Callback) JSONP zu erhalten: "JSONCALLBACK", // Der benutzerdefinierte JSONP-Callback-Funktionsname ist der Standard-Zufallsfunktionsname JSONPCallback, der automatisch von Jquery erstellt wurde. dynamisch ausgeführt.Serverseitiger Beispielcode, nehmen Sie Java als Beispiel:
Der Servercode ist der Schlüsselpunkt. Ich dachte zunächst, solange der Client über JSONP direkt auf Domänen zugreifen kann, ist dies nicht der Fall, und der serverseitige Support ist erforderlich.
Der Code ist wie folgt:
public void jsonptest () löscht ioException {httpServletRequest Request = servletActionContext.getRequest (); HttpServletResponse response = servletActionContext.getResponse (); // Erhalten Sie den Namen der Rückruffunktion basierend auf dem Parameternamen der von html angegebenen JSONP -Rückruffunktion. // simuliert einfach eine JSON -Zeichenfolge. Tatsächlich können Sie Googles GSON von Google verwenden, um es zu konvertieren. Die Anzahl der Male wird durch String -Spleißen geschwenkt // {"Name": "Zhang San", "Alter": 28} /// Es ist zu entkommen, dass "Zeichenfolge JSONSTRAGE" {/"name/":/"zhang san/",/"Alter/": 28} "; // Die endgültigen zurückgegebenen Daten: Success: Success.jsonPcall ({" name "name", ' rendersstr = callbackname+"("+jomin+")" Antwort.Das Prinzip von JSONP:
Registrieren Sie zuerst einen Rückruf (z. B. "JsonCallback") im Client und übergeben Sie dann den Callback -Namen (z. B.: success_jsonpcallback) an die entsprechende Verarbeitungsfunktion auf der Serverseite.
Der Server generiert JSON -Daten, die an den Client zurückgegeben werden müssen. In Form der JavaScript -Syntax wird dann eine Funktion generiert, und der Funktionsname ist der Wert des übergebenen Parameters (JsonCallback) (Success_jsonpcallback).
Schließlich werden die JSON -Daten direkt in die Funktion als Parameter eingebaut, wodurch ein Dokument der JS -Syntax generiert und an den Client zurückgegeben wird.
Der Client -Browser analysiert das Skript -Tag und verwendet die vom Server zurückgegebenen Daten als Parameter.
Es wird in die vom Client vordefinierte Rückruffunktion übergeben (wie im obigen Beispiel, dem Erfolg: Funktion (JSON), der von der Methode jQuery $ .ajax () eingekapselt wurde).
Tatsächlich lädt Cross-Domänen Daten durch dynamisches Hinzufügen von Skripten und Daten können nicht direkt erhalten werden, sodass Rückruffunktionen erforderlich sind.
(2) Verwenden Sie Jquerys GetJson, um Daten über Domänen hinweg zu lesen
Tatsächlich ist das Grundprinzip der GetJson -Methode die gleiche wie die Art und Weise, wie AJAX JSONP verwendet.
GetJson wird in JQuery häufig verwendet, um Remotedaten zu erhalten und diese über das JSON -Format zurückzugeben. Der Prototyp der Funktion lautet wie folgt:
Jquery.getJson (URL, Daten, Erfolg (Daten, Status, xhr))
Parameterbeschreibung
URL erforderlich. Gibt an, welche URL an die Anfrage gesendet werden soll.
Daten sind optional. Gibt die an den Server gesendeten Daten zusammen mit der Anforderung an.
Erfolg (Daten, Status, xhr) ist optional. Gibt die Funktion an, die ausgeführt werden soll, wenn die Anforderung erfolgreich ist.
Zusätzliche Parameter:
Response - Enthält Ergebnisdaten aus der Anfrage
Status - enthält den Status der Anfrage
xhr - enthält xmlhttprequest -Objekt
Diese Funktion ist eine abgekürzte AJAX -Funktion, die tatsächlich entspricht:
Der Code ist wie folgt:
$ .ajax ({url: url, Daten: Daten, Erfolg: Callback, DataType: JSON});Kommen wir wieder auf den Punkt, schauen wir uns an, wie GetJson verwendet werden kann, um Daten über Domänen hinweg zu erhalten.
Beispielcode für die HTML -Seite:
Der Code ist wie folgt:
$ .getJson ("http://api.vevb.com/apitools/ajax_props.do&jsoncallback=?", Funktion (Daten) {alert (data);});Ausführungsprinzip:
Beim Senden einer Anfrage müssen Sie einen Callback -Rückruffunktionsnamen an die Serverseite weitergeben. Die Serverseite erhält den Namen der Rückruffunktion und gibt dann die Rückgabedaten in Form von Parametern an den Client zurück, damit der Client sie aufrufen kann.
Nach der Adresse der Anforderungs -URL müssen Sie daher den Parameter wie JsonCallback =?, Verwenden und JQuery wird das automatisch ersetzen? Nummer mit dem Namen der automatisch generierten Rückruffunktion.
Die endgültige tatsächliche Anfrage lautet also: http://api.vevb.com/apitools/ajax_props.do&jsoncallback=jsonp132244422697
Wenn Sie es also mit der AJAX -Methode vergleichen möchten, dh die Rückruffunktion ist eine der automatisch generierten Funktionsnamen und die andere sind die manuell angegebenen Funktionsnamen.
Achten Sie auf die folgenden Punkte:
1. Die an den Datenempfänger gesendete Adresse muss mit dem Parameter wie callback =? Und diesem? ist der Name der Rückrufmethode, die automatisch durch JQuery ersetzt wird. (In JQuery 1.4 können Sie den Namen der Rückrufmethode selbst angeben)
2. Beachten Sie, dass die vom JS -Skript gesendeten Daten nicht als var data = "{'userername': 'sanjer', 'userId': '110'}" geschrieben werden können; sollte aber als var data = {Benutzername: 'Sanjer', UserId: '110'} geschrieben werden, und Sie sollten auf diesen Punkt achten. Um Daten zu empfangen, die vom Server zurückgegeben werden, muss der Server die Daten in eine JSON -Format -Zeichenfolge zusammenfassen und zusammen mit dem Rückrufwert zurückgeben. (Bitte lesen Sie den obigen Beispielcode sorgfältig durch).
3. Wenn JQuery die $ .GetJson -Methode von JQuery aufruft, hat er eine eigene Verarbeitung, die tatsächlich über Skripts SCR angefordert wird. Sie sollten jedoch wissen, dass die Daten endlich über die URL durch GET gesendet werden. Dies stellt fest, dass die gesendete Datenmenge nicht zu stark sein kann, andernfalls wird die URL sie nicht zu lange erhalten (es ist unmöglich, sie in einer Postmethode einzureichen, wenn die GetJSON -Methode eingereicht wird).
Wenn Sie große Daten über Domänen hinweg senden möchten, können Sie die von JQuery bereitgestellte AJAX -Methode auswählen, und es ist am besten, die GetJson -Methode nicht zu verwenden.
4. Die obigen Beispiele basieren auf der Prämisse, dass beide Aspekte der Entwicklung unter Ihrer Kontrolle stehen. Achten Sie auch darauf, dass der Sicherheitsfaktor des Serverprogramms nicht hoch ist (es wird empfohlen, dass Sie keine wichtigen und sensiblen Logikverarbeitungseinheiten für die Daten empfangen).
Die obige Methode von Java in Kombination mit JQuery zur Erzielung von Cross-Domain-Namenserfassungsdaten ist der gesamte Inhalt, den ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.