2010-05-25 25 views
5

OK aquí está la situación: tengo un CMS hospedado externamente que funciona muy bien para el 99% de nuestras necesidades. Sin embargo, en las cosas más avanzadas, me inyecto mi propio CSS + JS y hago magia. El problema al que me estoy enfrentando es cargar una página HTML simple de jQuery.ajax() llamadas. Parece funcionar en el sentido de que no se lanzan advertencias o errores; sin embargo, en mi controlador de éxito (que se ejecutó IS), ¡la respuesta está en blanco!jQuery AJAX con dos dominios

Me he estado rascando la cabeza durante toda la mañana tratando de resolver esto y lo único que se me ocurre es que tiene algo que ver con el problema de dominio cruzado (aunque parece que funciona).

JavaScript inyectado:

$(document).ready(function() { 
    doui(); 
}); 
function doui() { 
    $.ajax({ 
     url: 'http://apps.mydomain.com/css/feecalc/ui.htm', 
     cache: false, 
     success: ajax_createUI, 
     charset: "utf-8", 
     error: function(e) { 
      alert(e); 
     } 
    }); 
} 
function ajax_createUI(data, textStatus) { 
    alert(data); 
    $("#ajax-content").html(data); 
} 

Mi ajax_createUI() controlador de éxito y se llama textStatus es "éxito"; sin embargo, los datos están vacíos.

Este JS archivo reside @http://apps.mydomain.com/css/js/feecalc.js sin embargo, el sitio web de CMS (que recibe el JS inyecta en él) reside @http://www.mydomain.com/

Estoy siendo tonta o se trata de un error que parece que debería estar trabajando, pero ISN ¿t?

Respuesta

5

Esto no es un error, es una característica de los navegadores modernos: Same Origin Policy Hay tres formas de evitar esto. En cuanto a la forma en que has atacado el problema, me gustaría ver en jsonp

+0

¿Hay alguna razón por la que no esté generando un error? Supongo (y estoy leyendo su enlace) que el origen está en la página y no en el guión. –

+0

¿Es esto correcto: el dominio www.natronacounty-wy.gov obtiene inyectada la secuencia de comandos que ha pegado, y luego esa secuencia de comandos llama a http: //apps.natronacount-wy ... desde la página www.natronacounty-wv.gov? – Nick

+0

Correcto. El CMS es el sistema www, en el CMS pego etiquetas

1

Creo que el método más apropiado para la carga de una página es .load()

En segundo lugar, como se dijo Nick, que está experimentando problemas de dominios cruzados . Una opción sería ejecutar load() contra una página en su sitio que actúa como proxy para solicitar la página que necesita.

Por ejemplo: Usted solicita .load (/myPage.aspx) y la solicitud MyPage.aspx http://apps.natronacounty-wy.gov/css/feecalc/ui.htm y lo devuelve al cliente

+1

No puedo hacer eso ya que www no es mi servidor, es el sistema CMS del proveedor. aplicaciones ES mi servidor en el que está almacenado todo mi JS. –

+0

@Andrew Creo que no entiendes bien, escribirías el proxy en tu servidor que tiene las llamadas javascript. De esta forma, escribe su javascript para acceder a una página/servlet local que carga el contenido remoto –

+0

@ Flash84x No puedo escribir ningún código personalizado en el servidor que pueda proxy las llamadas. El único servidor al que tengo acceso son las aplicaciones y, si pudiera leer un resultado HTTP de eso, no necesitaría un proxy. –

0

Se podría consultar a pesar de su solicitud a través YQL (Yahoo Query Language), que dará como resultado un archivo JSONP (incluso admite XMLP -> XML con una función de devolución de llamada). Esto podría disminuir su rendimiento, pero Yahoo proporciona servidores rápidos.

+0

Probé el plugin de jQuery que usa YQL e hizo lo mismo :(http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/ –

+0

Es realmente sencillo imprimir el suyo, solo escriba la función de devolución de llamada y consulta "SELECT * from html where url = '+ url +'", mientras selecciona XML como salida y su función de devolución de llamada como devolución de llamada. Dentro de la función de devolución de llamada, puede seleccionar lo que desea mostrar y agregarlo al DOM. – fb55