2010-05-25 2 views
2

Je développe avec le framework .NET, en utilisant le côté client jQuery 1.4.2. Lors du développement dans la version 3.6 de Firefox, un des nombreux appels ajax que je fais sur la page se déclenche deux fois, le second retournera avec succès mais ne déclenchera pas le successeur de l'appel ajax et le premier jamais retourne quelque chose. Donc, fondamentalement, les données sont toutes envoyées au serveur et la réponse est envoyée mais rien ne se passe avec la réponse.firefox, jQuery appels ajax tirant deux fois et ne jamais déclencher des fonctions de succès ou d'erreur

Voici un exemple de l'appel que je fais. Il arrive à l'un des appels ajax, donc il n'y a pas un qui est à l'origine du problème:

$.ajax({ 
    type:"POST", 
    contentType : "application/json; charset=utf-8", 
    data:"{}", 
    dataType:"json", 
    success:function(){ 
     alert('success'); 
    }, 
    error:function(){ 
     alert('error'); 
    }, 
    url:'/services.aspx/somemethod' 
}); 

})

De Firebug, voici les en-têtes du premier appel qui Firebug montre que ne répond jamais complètement, ce qui signifie que je ne vois pas de code de réponse et que le gif du chargeur dans le firebug ne disparaît jamais.

Note: Dans Firebug il dit habituellement tête de réponse, mais pour le premier appel de cet espace est vide

Server    ASP.NET Development Server/9.0.0.0 
X-AspNet-Version 2.0.50727 
Content-Type  application/json; charset=utf-8 
Connection   Close 

têtes de demande

Host    mydomain.com 
User-Agent  Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.3) 
        Gecko/20100401Firefox/3.6.3 (.NET CLR 3.5.30729) 
Accept  application/json, text/javascript, */* 
Accept-Language en-us,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/json; charset=utf-8 
X-Requested-With XMLHttpRequest 
Referer  http://mydomain.com/mypage.aspx 

Voici l'en-tête de la deuxième demande qui vient semble se terminer dans firebug (ie la réponse est 200):

Tête de réponse er

Server ASP.NET Development Server/9.0.0.0 
X-AspNet-Version 2.0.50727 
Content-Type application/json; charset=utf-8 
Connection Close 

têtes de demande

Host  mydomain.com 
User-Agent  Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.3)   
       Gecko/20100401 Firefox/3.6.3 (.NET CLR 3.5.30729) 
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language en-us,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/json; charset=utf-8 
Referer  http://mydomain.com/mypage.aspx 

Pour résumer ma question, pourquoi deux demandes en cours et pourquoi aucun d'entre eux le déclenchement d'un gestionnaire succès ou erreur dans l'appel ajax.

J'ai vu cet article sur Firefox 3.5+ et les demandes Preflight

https://developer.mozilla.org/En/HTTP_access_control#Preflighted_requests

Dans l'article est dit que si un "POST" est faite avec tout autre type de contenu que « application/x-www -form-urlencoded, multipart/form-data, ou text/plain "que la requête est pré-flighted. Si c'est le cas, cela devrait arriver à tous mes appels.

Merci

+0

Voyez-vous ce comportement avec d'autres navigateurs? –

+0

non, seulement firefox –

+0

Avez-vous essayé sans l'option 'dataType'? – eyelidlessness

Répondre

0

Ce n'est pas une réponse autant qu'une solution temporaire proposée. Rendre l'appel synchrone avec async:false et voir si les choses fonctionnent à nouveau.

J'ai récemment arraché mes cheveux sur un insecte semblable.

+0

Je dois faire plus de tests avant de le mettre sur S.O., mais pour tous ceux qui sont intéressés: Cela arrive avec jQuery 1.3.2 et Firefox. Un facteur commun semble être que je fais un appel AJAX, et les appels supplémentaires sont tous lancés par la méthode sur-succès après cela. Seul le premier appel AJAX (parent) et le dernier des appels enfants semblent se terminer, bien que FireBug les montre tous et que le serveur les récupère tous. Ce n'est pas une condition de course pure, car le faire avec un débogueur cause toujours le problème. Faire l'enfant-appels synchrones "le corrige". – Darien

+0

La pire partie de ce problème est qu'il est difficile à reproduire, il se produit toutes les heures, mais même si je ne veux pas que l'un de ces appels soit asynchrone comme une solution. –

Questions connexes