Estoy tratando de cargar una página HTML entre dominios usando AJAX, pero a menos que el tipo de datos sea "jsonp", no puedo obtener una respuesta. Sin embargo, al usar jsonp, el navegador espera un tipo de script mime pero recibe "text / html".
Mi código para la solicitud es:
$.ajax({
type: "GET",
url: "http://saskatchewan.univ-ubs.fr:8080/SASStoredProcess/do?_username=DARTIES3-2012&_password=P@ssw0rd&_program=%2FUtilisateurs%2FDARTIES3-2012%2FMon+dossier%2Fanalyse_dc&annee=2012&ind=V&_action=execute",
dataType: "jsonp",
}).success( function( data ) {
$( 'div.ajax-field' ).html( data );
});
¿Hay alguna forma de evitar usar jsonp para la solicitud? Ya he intentado usar el parámetro crossDomain pero no funcionó.
Si no, ¿hay alguna forma de recibir el contenido html en jsonp? Actualmente la consola dice "inesperado <" en la respuesta de jsonp.
javascript
jquery
ajax
cross-domain
xonorageous
fuente
fuente
Respuestas:
Notas de jQuery Ajax
Hay algunas formas de superar la barrera entre dominios :
Hay algunos complementos que ayudan con las solicitudes entre dominios :
¡Aviso!
La mejor manera de superar este problema es crear su propio proxy en el back-end, de modo que su proxy apunte a los servicios en otros dominios, porque en el back-end no existe la misma restricción de política de origen . Pero si no puede hacerlo en el back-end, preste atención a los siguientes consejos.
¡Advertencia!
El uso de proxies de terceros no es una práctica segura, ya que pueden realizar un seguimiento de sus datos, por lo que pueden usarse con información pública, pero nunca con datos privados.
Los ejemplos de código que se muestran a continuación usan jQuery.get () y jQuery.getJSON () , ambos son métodos abreviados de jQuery.ajax ()
CORS Anywhere
CORS Anywhere es un proxy node.js que agrega encabezados CORS a la solicitud proxy.
Para usar la API, simplemente prefija la URL con la URL de la API. (Admite https : consulte el repositorio de github )
Si desea habilitar automáticamente las solicitudes de dominio cruzado cuando sea necesario, use el siguiente fragmento:
Cualquier origen
Cualquiera que sea el origen es un acceso jsonp de dominio cruzado . Esta es una alternativa de código abierto para anyorigin.com .
Para obtener los datos de google.com, puede usar este fragmento:
Proxy CORS
CORS Proxy es un proxy simple node.js para habilitar la solicitud CORS para cualquier sitio web. Permite que el código javascript en su sitio acceda a recursos en otros dominios que normalmente estarían bloqueados debido a la política del mismo origen.
¿Como funciona? CORS Proxy aprovecha el uso compartido de recursos de origen cruzado, que es una característica que se agregó junto con HTML 5. Los servidores pueden especificar que desean que los navegadores permitan que otros sitios web soliciten los recursos que alojan. CORS Proxy es simplemente un proxy HTTP que agrega un encabezado a las respuestas que dicen "cualquiera puede solicitar esto".
Esta es otra forma de lograr el objetivo (ver www.corsproxy.com ). Todo lo que tiene que hacer es eliminar http: // y www. desde la URL que se está representando y anteponga la URL con
www.corsproxy.com/
Navegador proxy CORS
Recientemente encontré este, involucra varias utilidades de Cross Origin Remote Sharing orientadas a la seguridad. Pero es una caja negra con Flash como backend.
Puede verlo en acción aquí: navegador proxy CORS
Obtenga el código fuente en GitHub: koto / cors-proxy-browser
fuente
$.ajaxPrefilter
y funcionó muy bien. ¡Muchas gracias!Puede usar Ajax-cross-origin un complemento jQuery. Con este complemento usas
jQuery.ajax()
dominio cruzado. Utiliza los servicios de Google para lograr esto:Es muy facíl de usar:
Puede leer más aquí: http://www.ajax-cross-origin.com/
fuente
crossOrigin
opción de jQuery ciertamente no hace nada para mitigar las políticas del mismo origen. Eliminaría esta respuesta si pudieraSi el sitio externo no admite JSONP o CORS, su única opción es utilizar un proxy.
Cree un script en su servidor que solicite ese contenido, luego use jQuery ajax para ejecutar el script en su servidor.
fuente
Simplemente ponga esto en el encabezado de su página PHP y funcionará sin API:
o
o
fuente
$_SERVER['HTTP_ORIGIN']
viene. No pude encontrarlo en la documentación de PHP ni en ningún otro lugar.Estoy publicando esto en caso de que alguien enfrente el mismo problema que estoy enfrentando en este momento. Tengo una impresora térmica Zebra, equipada con el servidor de impresión ZebraNet, que ofrece una interfaz de usuario basada en HTML para editar múltiples configuraciones, ver el estado actual de la impresora, etc. Necesito obtener el estado de la impresora, que se muestra en una de esas páginas html, ofrecidas por el servidor ZebraNet y, por ejemplo, alertar () un mensaje al usuario en el navegador. Esto significa que primero tengo que obtener esa página html en Javascript. Aunque la impresora está dentro de la LAN de la PC del usuario, esa misma Política de OrigenTodavía se mantiene firme en mi camino. Intenté JSONP, pero el servidor devuelve html y no he encontrado una manera de modificar su funcionalidad (si pudiera, ya habría configurado el encabezado mágico Access-control-allow-origin: *). Entonces decidí escribir una pequeña aplicación de consola en C #. Tiene que ejecutarse como administrador para que funcione correctamente; de lo contrario, controla: D una excepción. Aquí hay un código:
Todo lo que el usuario debe hacer es ejecutar esa aplicación de consola como administrador. Sé que es demasiado ... frustrante y complicado, pero es una solución al problema de la Política de dominio en caso de que no pueda modificar el servidor de ninguna manera.
editar: desde js hago una simple llamada ajax:
El html de la página solicitada se devuelve y se almacena en la variable de datos .
fuente
Para obtener el sitio externo del formulario de datos pasando usando un proxy local como lo sugiere jherax, puede crear una página php que obtenga el contenido para usted desde la URL externa respectiva y luego enviar una solicitud de obtención a esa página php.
como proxy php puedes usar https://github.com/cowboy/php-simple-proxy
fuente
Su
URL
no funciona en estos días, pero su código puede ser actualizado con esta solución de trabajo:fuente
Necesita un proxy CORS que delegue su solicitud desde su navegador al servicio solicitado con los encabezados CORS apropiados . La lista de dichos servicios se encuentra en el fragmento de código a continuación. También puede ejecutar el fragmento de código proporcionado para ver el ping a dichos servicios desde su ubicación.
fuente
Lo averigué. Usé esto en su lugar.
fuente