type success example error javascript jquery ajax

javascript - success - ¿Por qué mi $.ajax que muestra "verificación previa es un error de redirección no válido"?



ajax web (8)

Intenté el siguiente código en Postman y estaba funcionando. ¿Hay algo mal con el código?

$.ajax({ url: ''http://api.example.com/users/get'', type: ''POST'', headers: { ''name-api-key'':''ewf45r4435trge'', }, data: { ''uid'':36, }, success: function(data) { console.log(data); } });

Recibí este error en mi consola como se muestra a continuación, por favor avise.

XMLHttpRequest no puede cargar http://api.example.com/users/get respuesta para la verificación previa no es válida (redireccionar)


Configure el tipo de contenido http en el encabezado y también asegúrese de que el servidor esté autenticando CORS. Así es como hacerlo en PHP:

//NOT A TESTED CODE header(''Content-Type: application/json;charset=UTF-8''); header(''Access-Control-Allow-Origin: *''); header(''Access-Control-Allow-Methods: DELETE, HEAD, GET, OPTIONS, POST, PUT''); header(''Access-Control-Allow-Headers: Content-Type, Content-Range, Content-Disposition, Content-Description''); header(''Access-Control-Max-Age: 1728000'');

Por favor refiérase a:

http://www.w3.org/TR/cors/#cross-origin-request-with-preflight-0

¿Cómo funciona el encabezado Access-Control-Allow-Origin?


El error indica que la verificación previa está obteniendo una respuesta de redireccionamiento. Esto puede suceder por varias razones. Averigüe a dónde lo redireccionan para obtener pistas de por qué está sucediendo. Verifique la pestaña de red en Herramientas para desarrolladores.

Una razón, como mencionó @Peter T, es que la API probablemente requiere conexiones HTTPS en lugar de HTTP y todas las solicitudes a través de HTTP se redirigen. El encabezado de Location devuelto por la respuesta 302 diría la misma url con http cambiado a https en este caso.

Otra razón podría ser que su token de autenticación no se envía o no es correcto. La mayoría de los servidores están configurados para redirigir todas las solicitudes que no incluyen un token de autenticación a la página de inicio de sesión. Nuevamente, verifique el encabezado de su Location para ver si es donde se le está enviando y también eche un vistazo para asegurarse de que el navegador envió su token de autenticación con la solicitud.

A menudo, un servidor se configurará para redirigir siempre las solicitudes que no tienen tokens de autenticación a la página de inicio de sesión, incluidas las solicitudes de verificación previa / OPTIONS . Esto es un problema. Cambie la configuración del servidor para permitir solicitudes de OPTIONS de usuarios no autenticados.


Mi problema fue causado por exactamente lo contrario de @ehacinom. A mi API generada por Laravel no le gustaba el ''/'' final en las solicitudes POST. Funcionó bien en localhost pero no funcionó cuando se cargó en el servidor.


Mi problema fue que las solicitudes POST necesitan barras inclinadas ''/''.


Recibí el mismo error cuando intenté llamar al servicio web https como http webservice.

e.g when I call url ''http://api.example.com/users/get'' which should be ''https://api.example.com/users/get''

Este error se produce debido al estado de redireccionamiento 302 cuando intenta llamar a http en lugar de https.


Tuve el mismo error, aunque el problema era que tenía un error tipográfico en la URL

url: ''http://api.example.com/TYPO''

La API tuvo una redirección a otro dominio para todas las URL que están mal (errores 404).

Entonces, corregir el error tipográfico en la URL correcta lo solucionó para mí.


Tuve el mismo problema y me mantuvo despierto durante días. Al final, me di cuenta de que mi URL que apuntaba a la aplicación estaba completamente equivocada. ejemplo:

URL: ''http://api.example.com/'' URL: ''https://api.example.com/''.

Si es http o https, verifique.
Verifique la URL de redireccionamiento y asegúrese de que sea lo mismo que transmite.


Esta respuesta pasa exactamente por lo mismo (aunque sea angular): es un problema de CORS.

Una solución rápida es modificar cada solicitud POST especificando uno de los valores de encabezado ''Content-Type'' que no desencadenará una "verificación previa". Estos tipos son:

  • application / x-www-form-urlencoded
  • multipart / form-data
  • Texto sin formato

Cualquier otra cosa desencadena una verificación previa.

Por ejemplo:

$.ajax({ url: ''http://api.example.com/users/get'', type: ''POST'', headers: { ''name-api-key'':''ewf45r4435trge'', ''Content-Type'':''application/x-www-form-urlencoded'' }, data: { ''uid'':36, }, success: function(data) { console.log(data); } });