JQuery, XmlHttpRequest et Statut Code 0
J'ai récemment fait quelques Croix-domaine javascript à l'aide de JSONP, et ASP.NET MVC.
Le Contrôleur spécifique l'action ne pourra répondre à une demande POST, c'est par la conception.
Dans IE8, je peux voir (via Fiddler2) que la réponse est correcte, et le retour d'une réponse HTTP 200, avec le JSONP javascript.
Dans Firefox, Chrome et Safari, la réponse est toujours retourné, avec le code HTTP 200 et JSONP contenu, la seule différence est que l'objet XmlHttpRequest utilisé par JQuery est le paramètre le code d'état à 0, et le responseText à vide.
À l'origine, je pensais que c'était dû à COR HTTP Amont (Http de Contrôle d'Accès), dans lequel l'un en-tête personnalisé ou un type de contenu autres que text/plain serait la cause d'une requête HTTP supplémentaire (avec des OPTIONS), le verbe être envoyé au serveur. Je peux voir dans Fiddler2 que les OPTIONS de la demande ont répondu avec une erreur HTTP 404.
Le serveur web IIS7 (mais le serveur web de production sera un IIS6 encadré). Dans IIS7, je peux voir la norme OPTIONSVerbHandler répertoriés dans le gestionnaires, mais je ne suis pas convaincu que c'est en train de faire quoi que ce soit (en fait, je ne peux même pas trouver toute la documentation sur le OPTIONSVerbHandler n'importe où).
Pour contourner cela, j'ai modifié la bibliothèque JQuery pour ne pas définir l'en-tête personnalisé, et de modifier le content-type text/plain lieu de l'application/json, et Firefox commence enfin contournant la demande d'OPTIONS, et tout simplement Postes.
Le problème se situe toujours dans une réponse vide (en fonction de l'objet XmlHttpRequest), même si Fiddler2 montre que le succès d'une réponse HTTP 200, avec le contenu doit être retourné.
Toute aide?
OriginalL'auteur Matthew Abbott | 2009-07-23
Vous devez vous connecter pour publier un commentaire.
Se trouve, vous ne pouvez pas utiliser la Croix-Domaine d'appels avec JQuery l'aide de POST (ce qui est logique, puisqu'il rend une balise de script pour faire l'appel). Commutation à rentrer dans l'ordre la question, et maintenant, tout est de retour correctement.
Dû marcher à travers le JQuery source de la figure que l'un, mais merci pour la réponse.
Matt
OriginalL'auteur Matthew Abbott
Essayez d'utiliser firebug dans firefox pour voir la demande réelle d'être envoyé. Découvrez le net onglet pour voir la demande et la réponse HTTP. Peut-être que quelque chose est mal configuré? J'utilise aussi jsonview dans firefox pour visualiser les données JSON qui définit la applcaiton/json mimietype. Malheureusement, il ne gère pas les JSONP, mais ses proches.
OriginalL'auteur Paul Tarjan
Autres que toutes les erreurs évidentes sur le côté client, la principale raison pour cela est que gecko le moteur de recherche le
Access-Control-Allow-Origin
dans l'en-tête de laservlet
. Si elle ne le trouve pas, il va interrompre la communication et vous obtenez unstatus=0
etstatusText=null
. Aussi, lemoz-nullprincipal
en erreur d'analyse xml. Tout ça est très trompeur. Tous vous avez besoin pour résoudre ce problème est:Dans le
servlet
code et la vie sera bonne 🙂OriginalL'auteur mozandy
PAS vraiment LE CAS. Firefox envoie une OPTION d'en-tête comme suit:
Ici est ce qui est configuré par le client dans Firefox:
Mvc ne sais pas comment gérer cela car c'est seulement à la recherche pour un POSTE en-tête lors de l'utilisation de l'attribut
[HttpPost]
Manuellement permettre cela:
OriginalL'auteur