J'ai rencontré un problème de domaine croisé il y a deux jours, et il peut être résolu à l'aide de JSONP. (//www.vevb.com/article/57889.htm)
J'ai trié récemment:
1.JSONP.
Demande AJAX, DataType est JSONP. Ce formulaire nécessite l'ajustement de la demande au formulaire qui renvoie le rappel ([JSON-Object]) du côté du serveur. Si le serveur renvoie un objet JSON normal. Ensuite, lors de son débogage, l'erreur "Syntaxerror: Token inattendu" non apprise sera signalée sur la console du navigateur Chrome; L'erreur "Syntaxerror: Missing; avant instruction" sera signalée sur la console du navigateur Firefox.
2.Srame inter-domaine.
Ajoutez un élément iframe à la page. Lorsque vous devez appeler la demande GET, définissez le SRC de l'IFRAME sur l'URL de la demande GET pour lancer l'appel à la demande GET.
La copie de code est la suivante:
var url = "http://xxx.xxx.xxx?p1=1&p2=2";
$ ("# iframe"). att ("src", url); // cross-domain, utilisez iframe
La méthode IFRAME est plus forte que JSONP. En plus de pouvoir gérer les demandes HTTP, il peut également implémenter des appels JS dans les domaines.
3. Traitement des attributs SRC des éléments de script
Les attributs SRC d'Iframe, IMG, Style, Script et d'autres éléments peuvent demander directement des ressources à partir de différents domaines. JSONP est une simple implémentation des ressources de demande inter-domaines à l'aide de balises de script. Par conséquent, c'est essentiellement la même chose que JSONP, et cela nécessite également que le serveur demande le formulaire de rappel ...
La copie de code est la suivante:
var url = "http://xxx.xxx.xxx?p1=1";
var script = document.createElement ('script');
script.setAttribute ('src', url);
document.getElementsByTagName ('Head') [0] .APPEndChild (script);
4. Utilisez Get Processing sur le serveur.
Pour ceux qui n'ont pas d'exigences rigides pour le traitement sur le frontal, ils peuvent les résumer sur le serveur, puis lancer des appels sur le serveur, ce qui peut résoudre le problème du domaine croisé. Ensuite, selon la question de savoir si la demande est émise ou que la valeur de retour doit être obtenue, nous déciderons si le code utilise le mode synchrone ou asynchrone.
La copie de code est la suivante:
VOID STATIQUE PRIVÉE CREATEGETHTTPRESPONSE (URL de chaîne, int? Timeout, String UserAgent, Cookiecollection Cookies)
{
if (string.isnullorempty (url))
{
lancer un nouveau ArgumentNullexception ("URL");
}
var request = webRequest.create (URL) comme httpwebRequest;
request.method = "get";
if (! string.isnullorempty (userAgent))
{
request.UserAgent = userAgentnt;
}
if (timeout.hasvalue)
{
request.timeout = timeout.value;
}
if (cookies! = null)
{
request.cookieContainer = new CookieContainer ();
request.cookiecontainer.add (cookies);
}
request.begingetResponse (null, null); // asynchrone
// return request.getResponse () comme httpwebResponse;
}
5.Flash inter-domaine
Trop de pointe ==, étudiez-le à nouveau
Résumé: Les 5 méthodes ci-dessus sont des moyens courants de résoudre les problèmes de domaine croisé de JS. Le dernier est relativement haut de gamme. Rassisons-nous après l'avoir clairement étudié.