jsonpcallback datatype jquery json cross-domain

jquery - datatype - jsonp post



JSON: ¿Cómo hago una llamada JSON entre dominios? (8)

Debido a la misma política de origen, no puedes hacer esto. Una solución consiste en utilizar el plugin Flash AJAX jQuery http://flxhr.flensed.com/ que utiliza una película Flash para eludir la política de origen idéntico.

Las otras opciones son proxy las solicitudes a través de su propio dominio o utilizar JSONP.

Intento ejecutar el siguiente código jquery en la red local.

$.ajax({ type: "GET", url: "http://SomeSite/MyUrl/", cache: false, data: { ... }, dataType: "json", error: function (xhr, status, error) { ... }, success: function (json) { ... });

Todo funciona bien hasta que "SomeSite" es localhost. Me refiero al mismo servidor de lo que se descargó la página.

Pero cuando ''SomeSite'' es otro sitio de red (no localhost), parece que la solicitud se cuelga. No se llaman funciones de devolución de llamada "error" ni "éxito". ¿Cómo puedo hacer que este código funcione?

¡Gracias de antemano!


En realidad, solo puedes llamar a GET.
No hay una forma segura de invocar POST, PUT, DELETE o PATCH, a través de scripts de sitios cruzados.
La única forma viable es un proxy escrito a mano.



Tuve el mismo problema. Intentando obtener json de un servidor al que no tuve acceso (=> no JSONP).

Encontré http://benalman.com/projects/php-simple-proxy/ Agregue el proxy php a su servidor y haga la llamada ajax a este archivo.
"Cualquier parámetro GET que se pase a través del recurso URL remoto debe ser urlencoded en este parámetro".

$.ajax({ type: ''GET'', url:''proxy.php?url=http://anyDomain.com?someid=thispage'', dataType: "json", success: function(data){ // success_fn(data); }, error: function(jqXHR, textStatus, errorThrown) { // error_fn(jqXHR, textStatus, errorThrown); } });

donde proxy.php (el archivo de Ben Alman) está alojado en su dominio


Alternativa (que encontré que es la segunda mejor para esto):
http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/

Si tiene acceso al servidor del que desea cargar recursos / datos, puede modificar los encabezados de las solicitudes de los servidores para incluir

"Access-Control-Allow-Origin", "*"

La misma política de origen impuesta por los navegadores - hasta donde yo sé, en diversos grados de rigor dependiendo del navegador - está (¿parcialmente?) Basada en los valores de los encabezados de respuesta.

Tuve el mismo problema al intentar cargar json desde un servicio web. Todos los hacks de JS que encontré para eludir realmente no funcionaban y me preguntaba por qué incluso tengo que hacer esto, si quiero cargar datos de un servidor que yo mismo controlo (y confío). Luego aprendí que los encabezados de respuesta del servidor juegan un papel vital en todo este asunto. Cuando agregué el encabezado mencionado anteriormente a la respuesta http de mi servicio web, el problema fue resuelto.


Tuve un problema similar. Intenté el script proxy citado por Symba, pero por alguna razón no podría funcionar en mi máquina. En mi caso, estaba intentando enviar una solicitud a una aplicación alojada en un JBoss AS en el mismo host. De alguna manera, la versión de JBoss I no tenía forma de modificar encabezados de respuesta para poder incluir "Access-Control-Allow-Origin", "*".

Lo resolví utilizando el enfoque de Symba anterior, pero en lugar del guión de Ben Alman, establecí un proxy inverso en mi Servidor Apache, consulte http://docs.oseems.com/general/application/apache/configure-reverse-proxy . Por defecto, Apache aún tendría problemas de dominio cruzado. Al configurar el encabezado de respuesta "Access-Control-Allow-Origin", "*", consulte http://enable-cors.org/server_apache.html , el problema desaparece.



¿Tiene acceso al servidor a ''SomeSite'', o es tercero?

  • Si tiene acceso, puede habilitar CORS wp , de inicio en él. En su forma más simple (los datos no son sensibles a la sesión), simplemente agregue el encabezado: Access-Control-Allow-Origin: *

  • Si no tiene acceso, ¿sabe si es compatible con JSONP wp , entonces ? Esto generalmente implica pasar al menos un parámetro de callback en la URL. (Por supuesto, si tiene acceso, también puede agregar compatibilidad con JSONP ).

  • Si no tiene acceso para realizar cambios en ''SomeSite'' y no es compatible con CORS ni JSONP , es posible que pueda utilizar YQL wp , home como proxy. CORS tanto CORS como JSONP e incluso puede traducir formatos de datos, seleccionar una parte de los datos, etc.
    (Tenga en cuenta que YQL respeta robots.txt por lo que si se trata de un sitio de terceros que restringe el acceso automatizado, es posible que todavía no tenga suerte).