Encontré un problema de dominio cruzado hace dos días, y se puede resolver usando JSONP. (//www.vevb.com/article/57889.htm)
He resuelto recientemente:
1.Jsonp.
Solicitud de AJAX, el tipo de datos es JSONP. Este formulario requiere que la solicitud se ajuste al formulario que devuelve la devolución de llamada ([json-object]) en el lado del servidor. Si el servidor devuelve un objeto JSON normal. Luego, al depurar, el error de "Token inesperado" no capturado: token inesperado "se informará en la consola del navegador Chrome; El error "SyntaxError: Falt; antes de la declaración" se informará en la consola del navegador Firefox.
2.Frame Cross Dominio.
Agregue un elemento iframe a la página. Cuando necesite llamar a la solicitud GET, configure el SRC del iframe en la URL de solicitud GET para iniciar la llamada a la solicitud GET.
La copia del código es la siguiente:
var url = "http://xxx.xxx.xxx?p1=1&p2=2";
$ ("#iframe"). attr ("src", url); // cruzado, use iframe
El método de iframe es más fuerte que JSONP. Además de poder manejar las solicitudes HTTP, también puede implementar llamadas JS en todos los dominios.
3. Procesamiento de atributos SRC de elementos de script
Los atributos SRC de iframe, IMG, estilo, script y otros elementos pueden solicitar directamente recursos de diferentes dominios. JSONP es una implementación simple de los recursos de solicitud de dominio cruzado utilizando etiquetas de script. Por lo tanto, esto es esencialmente lo mismo que JSONP, y también requiere que el servidor solicite el formulario de devolución de llamada ...
La copia del código es la siguiente:
var url = "http://xxx.xxx.xxx?p1=1";
var script = document.createElement ('script');
script.setAttribute ('src', url);
document.getElementsByTagName ('Head') [0] .AppendChild (script);
4. Use el procesamiento Get Get en el servidor.
Para aquellos que no tienen ningún requisito rígido para procesar en el front-end, pueden encapsularlos en el servidor e iniciar llamadas en el servidor, lo que puede resolver el problema de dominio cruzado. Luego, según si la solicitud se emite o se debe obtener el valor de devolución, decidiremos si el código usa el modo sincrónico o asíncrono.
La copia del código es la siguiente:
Void estático privado creategethttpResponse (URL de cadena, int? Tiempo de espera, String UserAgent, CookieCollection Cookies)
{
if (string.isnullorempty (url))
{
arrojar una nueva argumento NULLException ("URL");
}
Var request = WebRequest.Create (URL) como httpwebRequest;
request.method = "get";
if (! string.isnullorempty (userAgent))
{
request.useragent = userAgent;
}
if (timeOut.hasValue)
{
request.timeout = timeOut.Value;
}
if (cookies! = nulo)
{
request.cookieContainer = new Cookiecontainer ();
request.cookiecontainer.add (cookies);
}
request.begingEtresponse (nulo, nulo); // asíncrono
// devuelve request.getResponse () como httpwebResponse;
}
5. Cross-Dominio de flash
Demasiado corte ==, estudíelo de nuevo
Resumen: Los 5 métodos anteriores son formas comunes de resolver problemas de dominio cruzado de JS. El último es relativamente alto. Hagamos por ello después de haberlo estudiado claramente.