¿Hay alguna forma de detectar un error causado por Access-Control-Allow-Origin al realizar una solicitud? Estoy usando jQuery, y el controlador establecido en .ajaxError() nunca recibe una llamada porque, para empezar, nunca se realiza la solicitud.
¿Hay algún trabajo alrededor?
Para las solicitudes de CORS, el controlador onError de XmlHttpRequest debería activarse. Si tiene acceso al objeto XmlHttpRequest sin procesar, intente configurar un controlador de eventos como:
function createCORSRequest(method, url){ var xhr = new XMLHttpRequest(); if ("withCredentials" in xhr){ xhr.open(method, url, true); } else if (typeof XDomainRequest != "undefined"){ xhr = new XDomainRequest(); xhr.open(method, url); } else { xhr = null; } return xhr; } var url = 'YOUR URL HERE'; var xhr = createCORSRequest('GET', url); xhr.onerror = function() { alert('error'); }; xhr.onload = function() { alert('success'); }; xhr.send();Tenga en cuenta algunas cosas:
En las solicitudes de CORS, el archivo console.log del navegador mostrará un mensaje de error. Sin embargo, ese mensaje de error no está disponible para su código JavaScript (creo que esto se hace por razones de seguridad, hice esta pregunta una vez antes: ¿Es posible detectar errores de CORS? ).
El xhr.status y el xhr.statusText no están configurados en el controlador onError, por lo que realmente no tiene ninguna información útil sobre por qué falló la solicitud CORS. Solo sabes que falló.
Es posible obtener un estado de error así:
xhr.onerror = function(e) { alert("Error Status: " + e.target.status); };Fuente: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest
Establezca un controlador para onerror y podrá detectar las excepciones entre dominios. No sé por qué se activa el evento onerror para las excepciones y no el evento de error , pero lo probé y funcionó.
req = $.get('http://www.example.com'); req.onerror = function() { alert('An exception occurred.') };