2009-11-16 10 views
15

estoy usando sencilla jQueryjQuery: Tengo solicitud de OPCIONES en lugar de GET

$.get(....); 

Aquí en vez de conseguir la respuesta GET consigo OPCIONES (registró firebug neto)

mismo código está trabajando muy bien en. Safari. Parece un problema con Firefox.

solución alternativa/soluciones para solucionar este problema ..

Gracias

Kurund

+1

es la URL que está haciendo la solicitud para el mismo dominio que la página, o se trata de cruz -¿dominio? –

+0

Eso es ... increíblemente extraño.¿Qué tal un caso de prueba mínimo así que tenemos la esperanza de descubrir qué está pasando? – outis

+1

Llamada de Url es dominio cruzado. –

Respuesta

1

Esto es probablemente debido a la limitación de Javascript que hacen XMLHttpRequests entre dominios. Esto generalmente no está permitido por razones de seguridad. Consulte la pregunta mencionada anteriormente o similar question I asked.

Para resolver este problema:

Espero que ayude!

26

La solicitud OPTIONS lo que se ve es la solicitud de verificación previa, se puede leer sobre eso aquí:

Está ahí porque estás solicitando un XMLHttpRequest de dominio cruzado para que el navegador tenga que verificar si su solicitud está permitida en el servidor remoto o no t.

hay dos soluciones para resolver el problema (como se mencionó anteriormente):

  • aplicar la respuesta de la solicitud OPTIONS con los correspondientes Access-Control-* cabeceras
  • utilizar una solicitud en lugar de sencilla JSON
JSONP
+0

Ese parece ser mi caso. Pero, ¿cómo implementaría la respuesta para la solicitud de OPCIÓN? ¿Dónde debería implementarlo? Mi WebMethod ni siquiera se llama. ¿Debo anular algo? – Nawaz

+0

@Nawaz: No estoy familiarizado con .NET, pero tal vez este artículo podría ayudarlo: http://encosia.com/using-cors-to-access-asp-net-services-across-domains/ –

+5

Tengo que dicen que el comportamiento entre dominios de los navegadores "modernos" es ridículo. Si tiene un servidor como couchdb que envía Access-Control-Allow-Origin: * pero no implementa OPTIONS, no puede hacer un simple AJAX GET porque el navegador decide 'verificar' primero y romper todo. El desarrollador sabe que el GET funcionará, ¡pero el navegador no lo cree! – Marc

1

Tuve el mismo problema, la causa que pensé que estaba en la sección html <head> había establecido el elemento base en este

<base href="http://local.develepment.url" /> 

Qué he cambiado a

<base href="http://<?php echo $_SERVER['HTTP_HOST']?>/" /> 
Cuestiones relacionadas