2010-10-07 34 views
0

Je développe une application qui effectue une requête AJAX d'origine croisée vers un serveur HTTP écrit en utilisant Netty.XMLHttpRequest renvoie le statut de 0 dans Firefox 3.6.10 et plus à partir de demandes d'origine croisée

Un exemple du type de code Javascript en cours d'exécution est ci-dessous.

 $.ajax({ 
      type:"GET", 
      url:"http://localhost:5000/someresource", 
      data: { id1: "1", id2: "2" }, 
      success: function(status, textStatus, xhr) { 
       alert("Success") 
      }, 
      error: function(status, textStatus, xhr) { 
       alert("Error") 
      } 
     }); 

Le problème que je vois est que sur Firefox (3.6.10 et 4.0 beta) l'état du XMLHttpRequest est toujours 0, quel que soit l'état de la réponse. Dans firebug je peux voir que le serveur retourne le bon état pour la requête, mais ceci n'est pas transmis à l'objet XMLHttpRequest.

Ci-dessous est les en-têtes de requête et de réponse envoyés

Response Headers 
Content-Type text/plain; charset=utf-8 
Content-Length 0 
Access-Control-Allow-Orig... http://localhost:9000 
Cache-Control no-cache 
Connection Keep-Alive 
Date Thu, 07 Oct 2010 07:52:08 GMT 

Request Headers 
Host localhost:5000 
User-Agent Mozilla/5.0.... 
Accept */* 
Accept-Language en-gb,en;q=0.5 
Accept-Encoding gzip,deflate 
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive 115 
Connection keep-alive 
Content-Type application/x-www-form-urlencoded 
Referer http://localhost:9000/test 
Origin http://localhost:9000 

J'ai essayé d'exécuter le code dans Chrome, Opera et Safari et ils ont tous fonctionnent très bien. Est-ce que c'est quelque chose que je fais ou un bug dans Firefox?

Merci d'avance.

+0

Est-ce toujours un problème ouvert? Je semble avoir un comportement d'erreur sur Chrome 16 et Firefox 10.0 en ce qui concerne les redirections 302, XHR et CORS. Les redirections fonctionnent très bien. – ricosrealm

Répondre

1

J'ai vu ce problème dans Firefox 3.6+ et chrome. La raison pour laquelle j'ai trouvé est que je déboguais le site sur le serveur localhost. Ces deux éléments ne renvoient les codes de réponse appropriés que lorsqu'ils sont exécutés à partir d'une URL distante. Ils renvoient tous deux des codes d'état différents pour localhost.