1. Qu'est-ce que le domaine croisé?
Étant donné que le navigateur adopte les restrictions de politique de même original pour des raisons de sécurité, JQuery ne peut pas utiliser directement des objets ou des données sur les noms de domaine. Par exemple: a.com
La page A.HTML ne peut pas utiliser les objets ou les données de la page B.HTML sous le nom de domaine B.com à l'aide de jQuery, et par défaut, le nom de domaine Test...com ne peut pas être utilisé.
L'objet ou les données de test.html. Tant que JQuery remplit les conditions suivantes, elle sera considérée comme un nom de domaine croisé:
1. Le domaine principal est le même, le sous-domaine est différent, comme xxx.aaa.com et yyy.aaa.com
2. Le nom de domaine est le même, mais les ports sont différents, comme xxx.aaa.com:8000 et xxx.aaa.com
3. Le nom de domaine est le même, mais le protocole est différent, comme http://www.aaa.com/ et https://www.aaa.com/
Seulement si le protocole, le nom de domaine et le port sont exactement les mêmes jQuery ne seront pas considérés comme un nom de domaine croisé.
2. Solution à l'objet de fonctionnement du nom de domaine jQuery
1. La situation de la première arrivée du nom de domaine de niveau supérieur
Par défaut, la page A.HTML sous le nom de domaine A.COM ne peut pas utiliser l'objet Test.html ou les données sous le nom de domaine Test.A.com à l'aide de jQuery. Mais pour cette même situation que les noms de domaine de niveau supérieur, réinitialisez simplement document.domain = a.com dans a.html et test.html.
2. La situation où les noms de domaine de niveau supérieur sont différents
Il existe deux méthodes pour la page A.HTML sous le nom de domaine A.COM, $ .getjson et $ .ajax
(1) Cross-Domain via AJAX de JQuery, qui est en fait implémenté à l'aide de la méthode JSONP.
JSONP est l'abréviation de JSON avec un rembourrage en anglais. Il permet à la génération de balises de script du côté serveur de revenir au client, c'est-à-dire génère dynamiquement des balises JavaScript.
La lecture des données est réalisée via la forme de rappel JavaScript.
Exemple de code pour le côté de la page HTML:
Le code est le suivant:
// Tout d'abord, vous devez introduire JQuery's JQuery (Document) .ready (function () {$ .ajax ({type: "get", // jquey ne prend pas en charge la méthode post-Domain Async: false, URL: "http://api.vevb.com/apitools/ajax_props.do," "JSONP", // collé sur le gestionnaire de demandes pour obtenir le nom du paramètre du nom de la fonction de rappel JSONP (par défaut: rappel) JSONP: "JSONCallback", // Le nom de la fonction de rappel JSONP personnalisé est le nom de fonction aléatoire par défaut JSONPCallback généré automatiquement par JQUery: "Success_jsonpcallback", // après avoir réussi à exiger JSON Data sur le serveur croisé, la fonction Callo Dynamiquement.Exemple de code côté serveur, prenez Java comme exemple:
Le code côté serveur est le point clé. J'ai d'abord pensé que tant que le client pouvait accéder directement à des domaines via JSONP, ce n'est pas le cas et la prise en charge côté serveur est requise.
Le code est le suivant:
public void jSonPest () lève ioException {httpservletRequest request = servletActionContext.getRequest (); HttpServletResponse Response = servletActionContext.getResponse (); // Obtenez le nom de la fonction de rappel basé sur le nom de paramètre de la fonction de rappel JSONP spécifiée par html // La valeur de callbackname est en fait: success_jsonpcallback string callbackname = (string) request.getAttribute ("jsonCallback"); // simulez simplifié une chaîne JSON. En fait, vous pouvez utiliser GSON de Google pour le convertir. The number of times is spliced through string splicing //{"name":"Zhang San","age":28} ///It is to escape the "sign. String jsonStr = "{/"name/":/"Zhang San/",/"age/":28}"; //The final returned data is: success_jsonpCallback({"name":"Zhang SAN "," Age ": 28}) String Renderstr = callBackName +" ("+ JSontr +") "; Response.SetContentType (" Text / Plain; Charset = UTF-8 "); Response.getWriter (). Write (Renderstr);}Le principe de JSONP:
Enregistrez d'abord un rappel (tel que «JSONCallback») sur le client, puis transmettez le nom de rappel (tel que: Success_jsonpcallback) à la fonction de traitement correspondante du côté serveur.
Le serveur génère des données JSON qui doivent être renvoyées au client. Ensuite, sous la forme de la syntaxe JavaScript, une fonction est générée et le nom de la fonction est la valeur du paramètre passé (JSONCallback) (Success_jsonPCallback).
Enfin, les données JSON sont placées directement dans la fonction en tant que paramètre, générant ainsi un document de syntaxe JS et le renvoyant au client.
Le navigateur client analyse la balise de script et utilise les données renvoyées par le serveur comme paramètre.
Il est transmis dans la fonction de rappel prédéfinie par le client (comme dans l'exemple ci-dessus, la méthode Success: Fonction (JSON) par la méthode jQuery $ .ajax ()).
En fait, le domaine croisé charge les données en ajoutant dynamiquement des scripts et les données ne peuvent pas être obtenues directement, donc des fonctions de rappel sont nécessaires.
(2) Utilisez Getjson de JQuery pour lire les données dans les domaines
En fait, le principe fondamental de la méthode Getjson est le même que la façon dont Ajax utilise JSONP.
Getjson est couramment utilisé dans jQuery pour appeler pour obtenir des données distantes et les renvoyer via le format JSON. Le prototype de la fonction est le suivant:
jQuery.getjson (URL, données, succès (données, statut, xhr))
Description du paramètre
URL requise. Spécifie l'url à envoyer à la demande.
Les données sont facultatives. Spécifie les données envoyées au serveur avec la demande.
Le succès (données, statut, XHR) est facultatif. Spécifie la fonction à exécuter lorsque la demande réussit.
Paramètres supplémentaires:
Response - contient des données de résultat de la demande
status - contient le statut de la demande
xhr - Contient l'objet XMLHttpRequest
Cette fonction est une fonction AJAX abrégée, qui est en fait équivalente à:
Le code est le suivant:
$ .ajax ({URL: URL, données: données, succès: rappel, type de données: json});Revenons au point, examinons comment utiliser Getjson pour obtenir des données dans les domaines.
Exemple de code pour la page HTML:
Le code est le suivant:
$ .getjson ("http://api.vevb.com/apitools/ajax_props.do&jsoncallback=?", fonction (data) {alert (data);});Principe d'exécution:
Lorsque vous envoyez une demande, vous devez passer un nom de fonction de rappel de rappel au côté serveur. Le côté serveur obtient le nom de la fonction de rappel, puis renvoie les données de retour au client sous forme de paramètres, afin que le client puisse l'appeler.
Par conséquent, après l'adresse de l'URL de demande, vous devez utiliser le paramètre tel que JSONCallback = ?, Et jQuery remplacera automatiquement le? Numéro avec le nom de la fonction de rappel générée automatiquement.
La demande réelle finale est donc: http://api.vevb.com/apitools/ajax_props.do&jsoncallback=jsonp1322444422697
Donc, si vous souhaitez le comparer avec la méthode AJAX, c'est-à-dire que la fonction de rappel est l'un des noms de fonction générés automatiquement et l'autre est les noms de fonction spécifiés manuellement.
Faites attention aux points suivants:
1. L'adresse envoyée au destinataire des données doit être ajoutée avec le paramètre tel que callback = ?, Et ceci? est le nom de la méthode de rappel qui sera automatiquement remplacé par jQuery. (Dans jQuery 1.4, vous pouvez spécifier le nom de la méthode de rappel vous-même)
2. Notez que les données envoyées par le script JS ne peuvent pas être écrites comme var data = "{'username': 'sanjer', 'userId': '110'}"; mais doit être écrit comme var data = {nom d'utilisateur: 'Sanjer', utilisateur: '110'}, et vous devez faire attention à ce point. Pour recevoir des données renvoyées par le serveur, le serveur doit résumer les données dans une chaîne de format JSON et les renvoyer avec la valeur de rappel. (Veuillez lire attentivement l'exemple de code ci-dessus).
3. Lors de l'appel de la méthode $ .getjson de jQuery, jQuery a son propre traitement, qui est en fait demandé via SCR du script, mais vous devez savoir que les données sont enfin envoyées via l'URL via GET. Cela détermine que la quantité de données envoyées ne peut pas être trop, sinon l'URL ne le recevra pas trop longtemps (il est impossible de le soumettre dans une méthode post-post lorsque la méthode Getjson est soumise).
Si vous souhaitez envoyer de grandes données sur des domaines, vous pouvez choisir la méthode AJAX fournie par jQuery, et il est préférable de ne pas utiliser la méthode Getjson.
4. Les exemples ci-dessus sont basés sur la prémisse que les deux aspects du développement sont sous votre contrôle. Faites également attention que le facteur de sécurité du programme serveur n'est pas élevé (il est recommandé de ne pas placer les unités de traitement logique importantes et sensibles à l'extrémité de réception des données).
La méthode ci-dessus de Java combinée à jQuery pour obtenir des données d'acquisition de noms de domaine croisé est tout le contenu que je partage avec vous. J'espère que vous pourrez vous faire référence et j'espère que vous pourrez soutenir Wulin.com plus.