Primero, hagamos algunos preparativos. De lo contrario, si entiendes lo que quiero decir, otros no entienden. Incluso si otros entienden, entonces siempre habrá personas que no entiendan. Entonces tienes que decirlo. Lo que quiero decir es que esta explicación debe hacerse. La respuesta es imprescindible. Para que sea más fácil de entender para todos.
Podemos demostrar problemas de dominio cruzado tomando dos nombres de dominio principales o un nombre de dominio principal + un nombre de dominio de segundo nivel como ejemplos.
Cliente A.com
Servidor B.com o Sacom
Angularjs versión v1.2.25
Los preparativos se hicieron muy bien, y casi expusimos a nuestro editor como Subline. No le diré a esta persona común.
Alguien ha gritado que esta pregunta ha existido durante mucho tiempo. ¿Cuál es el punto de preguntarlo ahora? ¿Podría ser que todavía puedes engañar a las flores? Bueno, realmente puedo escribir las flores abiertas. Veamos el programa, lo que vamos a realizar en este artículo es un ejemplo completo de dominio cruzado.
A continuación, veamos cómo el cliente solicita datos
Nota, nuestro código está escrito bajo el nombre de dominio de A.com
<! Doctype html> <html lang = "en" ng-app = "app"> <head> <meta charset = "utf-8"> <title> </title> <script src = "./ angular.min.js"> </script> <script type = "text/javaScript"> var app = angular.module ('app',, app ',,, </script type = "text/javaScript"> var app = angular.module (' app ',, app',, app ', []); app.controller ('appCtrl', ['$ scope', function ($ scope) {$ http ({método: 'jsonp', url: 'http://www.b.com/test.php?callback=JSON_CALLBack', }). $ http.jsonp ('http://www.b.com/test.php?callback=json_callback') .success (function (msg) {console.log (msg);});Vemos que esta es una solicitud de dominio cruzado directamente en forma de JSONP, y su operación es exactamente la misma que el método de solicitud de dominio cruzado en jQuery. Tenga en cuenta que nuestra devolución de llamada es solucionada, es decir, json_callback, intente no hacer cambios
Veamos la forma en que Test.php maneja los datos solicitados en el servidor B.com. Aquí usamos el método PHP nativo como referencia.
$ Callback = ISSET ($ _ Get ['Callback'])? $ _Get ['Callback']: default_callback; Salir ($ Callback. '('. JSON_ENCODE ($ data). ')');Veamos hacia atrás en los resultados de la consola del cliente.log registro
¡En este punto, hemos solicitado con éxito en todo el dominio!
Finalmente, hagamos un pequeño resumen y prestemos atención a los puntos clave:
1. El parámetro agregado después de la URL solicitada por el cliente en todos los dominios es? Callback = json_callback. El valor de la devolución de llamada del parámetro se especifica como json_callback. Tenga en cuenta que está capitalizado, es decir, json_callback, no realiza ningún cambio. Parece que este es un gran pozo. Si el valor de la devolución de llamada se cambia ligeramente, el cliente necesita definir la función de devolución de llamada a nivel mundial, y ¿cómo puedo pasarlo a $ alcance para el procesamiento? Para evitar problemas innecesarios, esto es lo que significa hacer
2. Mire el servidor nuevamente. El servidor debe especificar $ llamado = $ _get ['Callback']; Reciba la devolución de llamada y también encontrará que la devolución de llamada recibida no es el valor de la devolución de llamada escrita por nuestro cliente. El cliente especifica JSON_CALLBack para activar el mecanismo interno de AngularJS.