Comment Détecter l'Origine de la Croix (SCRO) Erreur par rapport aux Autres Types d'Erreurs pour XMLHttpRequest() en Javascript

Je suis en train d'essayer de détecter quand une XMLHttpRequest() échoue en raison d'une Origine de la Croix d'Erreur, par opposition à une mauvaise demande. Par exemple:

    ajaxObj=new XMLHttpRequest()
    ajaxObj.open("GET", url, true); 
    ajaxObj.send(null);

Envisager de 4 cas pour l'url:

Case 1: l'url est une adresse valide où access-control-allow-origin est correctement mis en

  • Exemple: http://192.168.8.35 où j'ai un serveur avec Access-Control-Allow-Origin: * dans l'en-tête
  • C'est facile à détecter que ajaxObj.readyState==4 et ajaxObj.status==200

Case 2: l'url est une adresse non valide à un serveur existant

  • Exemple: http://xyz.google.com où le serveur répond, mais ce n'est pas une requête valide de la
  • Cette résultats dans ajaxObj.readyState==4 et ajaxObj.status==0

Case 3: l'url est un non-existant adresse ip du serveur

  • Exemple: http://192.168.8.6 sur mon réseau local où il n'y a rien à répondre
  • Cette résultats dans ajaxObj.readyState==4 et ajaxObj.status==0

Case 4: l'url est une adresse valide où access-control-allow-origin est PAS set

  • Exemple: http://192.168.8.247 où j'ai un serveur sans Access-Control-Allow-Origin: * dans l'en-tête
  • Cette résultats dans ajaxObj.readyState==4 et ajaxObj.status==0

Le problème est: Comment puis-je différencier le Cas 4 (access-control-allow-origin erreur) et les Cas 2&3?

Dans le Cas 4, le Chrome console de débogage affiche l'erreur:

XMLHttpRequest cannot load http://192.168.8.247/. Origin http://localhost is not allowed by Access-Control-Allow-Origin.

Comment puis-je faire cette erreur connue en Javascript?

J'ai essayé de trouver une indication dans ajaxObj mais rien n'y semble être différent par rapport au Cas 2&3.

Ici est un simple test, j'ai utilisé:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>CORS Test</title>
<script type="text/javascript">
function PgBoot()
{
// doCORS("http://192.168.8.35");   //Case 1
// doCORS("http://xyz.google.com"); //Case 2
    doCORS("http://192.168.8.6");    //Case 3
// doCORS("http://192.168.8.247");  //Case 4
}

function doCORS(url)
{
    document.getElementById("statusDiv").innerHTML+="Processing url="+url+"<br>";
    var ajaxObj=new XMLHttpRequest();
    ajaxObj.overrideMimeType('text/xml');
    ajaxObj.onreadystatechange = function()
    {
        var stat=document.getElementById("statusDiv");
        stat.innerHTML+="readyState="+ajaxObj.readyState;
        if(ajaxObj.readyState==4)
            stat.innerHTML+=", status="+ajaxObj.status;
        stat.innerHTML+="<br>";
    }
    ajaxObj.open("GET", url, true); 
    ajaxObj.send(null);
}
</script>
</head>
<body onload="PgBoot()">
<div id="statusDiv"></div>
</body>
</html>

Résultats à l'aide de google Chrome:

Processing url=http://192.168.8.35
readyState=1
readyState=2
readyState=3
readyState=4, status=200

Processing url=http://xyz.google.com
readyState=1
readyState=4, status=0

Processing url=http://192.168.8.6
readyState=1
readyState=4, status=0

Processing url=http://192.168.8.247
readyState=1
readyState=4, status=0
InformationsquelleAutor user2871305 | 2013-10-11