2010-08-09 17 views
2

Je suis nouveau sur ce site et j'ai utilisé avec succès le partage de ressources d'origines croisées (CORS) «HTML5» pour POSTER des données sur mon serveur. Récemment, j'ai essayé d'inclure les GETs car nous essayons de faire en sorte que toutes nos communications ne dépendent pas d'une bibliothèque JavaScript. Ce faisant, je suis tombé sur un problème étrange qui semble quelque peu résolu pour Firefox, mais qui se comporte encore mal dans tous les navigateurs WebKit. Essentiellement tout ce qui renvoie un statut de < 200 ou> 300 arrive juste comme un statut de 0. Cela rend presque impossible la gestion des erreurs. Pour Firefox, je suis en mesure de mettre une chaîne aléatoire à la fin de la demande pour l'empêcher d'être mis en cache; fixant ainsi les 304s au moins. Cela ne fonctionne pas du tout pour moi dans Chrome/Safari. Voici un exemple de mon code:Problème lors de l'utilisation de HTML5 pour le partage de ressources inter-origine

xhr_request: function(type,url, data, callbacks, form){ 
    var form = (typeof(form)!=="undefined")?form:null; 
    var xhr = new XMLHttpRequest(); 
    var response; 
    data = com.ticommunity.obj_to_string(data); 
    xhr.open(type, url, true); 
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
    xhr.setRequestHeader("X-TxId", com.ticommunity.keyGen()); 
    xhr.withCredentials = true; 
    xhr.send(data); 
    xhr.onreadystatechange = function(){ 
     if(xhr.readyState == 4){ 
      if(xhr.status == 200){ 
       response = xhr.responseText; 
       com.ticommunity.comm.request_callback(response, callbacks, form); 
      }else{`//****this is where the 0 Status keeps coming up***` 
       response = xhr.status; 
       com.ticommunity.comm.request_callback(response, callbacks, form); 
      } 
     } 
    } 
} 

Est-ce que quelqu'un d'autre rencontre quelque chose de similaire et propose une solution de rechange? Est-ce que je fais juste quelque chose de stupide de ma part? Toute aide est grandement appréciée.

EDIT: Je me suis rendu compte que le 0 est ce qui est censé se produire par la spécification, mais j'ai vraiment besoin de pouvoir piéger pour ces situations et faire d'autres manipulations.

Répondre

0

Je n'ai pas vu ce problème spécifiquement, mais je me demande si vous auriez plus de chance d'utiliser un autre événement xhr, tel que xhr.onload. Vous pouvez faire confiance à onload pour déclencher des réponses réussies, il n'est donc pas nécessaire de vérifier xhr.status. Voici une liste complète des événements si vous avez besoin de piéger quelque chose d'autre:

http://www.w3.org/TR/XMLHttpRequest2/#events