2011-11-22 27 views
6

tengo un problema con una llamada posterior http en firefox. Sé que cuando hay un origen cruzado, primero Firefox hace OPCIONES antes del POST para conocer los encabezados de control de acceso y permiso. Con este código no tengo ningún problema:http solicitud posterior con origen cruzado en javascript

Net.requestSpeech.prototype.post = function(url, data) { 
    if(this.xhr != null) { 
     this.xhr.open("POST", url); 
     this.xhr.onreadystatechange = Net.requestSpeech.eventFunction; 
     this.xhr.setRequestHeader("Content-Type", "application/json; charset=utf-8"); 
     this.xhr.send(data); 
    } 
} 

que probar este código con un simple html que invoca esta función. Todo está bien y tengo la respuesta de OPCIONES y POST, y proceso la respuesta. Pero, estoy tratando de integrar este código con una aplicación existen con el uso de jquery (no sé si esto es un problema), cuando el envío (datos) se ejecuta en este caso, el navegador (firefox) hace lo mismo, primero hazlo una solicitud OPCIÓN, pero en este caso no te recibir la respuesta del servidor y pone este mensaje en la consola:

[18:48:13.529] OPTIONS http://localhost:8111/ [undefined 31ms] 

Indefinido ... lo indefinido es porque no recibes la respuesta, pero el código es el mismo, i No sé por qué en este caso la opción no recibe la respuesta, ¿alguien tiene una idea?

depuro mi aplicación de servidor y las OPCIONES llegan bien al servidor, pero parece que el navegador no espera la respuesta.

editar más tarde: ok creo que el problema es cuando funciono con un simple html con una etiqueta de script que invoca el método que hacen la petición de ejecución bien, pero en esta aplicación que no recibes la respuesta, tengo una de forma que realice un evento de envío, creo que el evento de envío regresa muy rápido y el navegador no tiene tiempo para obtener la solicitud de OPCIONES.

editar más tarde después: WTF, puedo solucionar el problema de hacer la solicitud POST para sincronizar:

this.xhr.open("POST", url, false); 

El Reponse presentar muy rápidamente y no puede esperar a la respuesta OPCIÓN del navegador, cualquier idea ¿esta?

Respuesta

2

Debido a la misma política de origen, no puede enviar mensajes de origen cruzados, puede solucionarlos incluyendo sitios en iframes (si tiene acceso al dominio) el sitio original contiene iframe en el sitio externo, la dirección interna es legal.

Cuestiones relacionadas