jQuery AJAX GET/POST requête retourne 404 dans le gestionnaire d'erreur, mais valide, la réponse est envoyée à partir du serveur
Le Problème: j'ai envoyer de requête GET ou POST avec jQuery.ajax et d'obtenir un gestionnaire d'erreur déclenchée avec la 404. La chose est, j'ai utilisé un renifleur pour vérifier la réponse du serveur et c'est une bonne réponse de 200 avec un bon JSON (retourné par Python json.décharges).
Et quelque chose de bizarre: après cet appel se termine avec 404 un navigateur recharge la page.
Tout ce qui vit dans le même domaine et sous-domaine).
jQuery appel:
$.ajax({type: "POST", url: "/m/auth/login", data: {x: "y"},
success: function(result) {}, error: function(xhr) {}, dataType: "json"});
Réponse comme on le voit par la sniffer avec une charge utile décompressé:
HTTP/1.1 200 OK\r\n
Content-Type: text/html; charset=utf-8\r\n
Cache-Control: no-cache, must-revalidate\r\n
Content-Encoding: gzip\r\n
X-AppEngine-Estimated-CPM-US-Dollars: $0.000018\r\n
X-AppEngine-Resource-Usage: ms=71 cpu_ms=0\r\n
Vary: Accept-Encoding\r\n
Date: Tue, 24 Dec 2013 21:04:36 GMT\r\n
Pragma: no-cache\r\n
Expires: Fri, 01 Jan 1990 00:00:00 GMT\r\n
Server: Google Frontend\r\n
Content-Length: 80\r\n
Alternate-Protocol: 80:quic,80:quic\r\n
\r\n
{"reason": {"password": "missing", "email": "missing"}, "error": "argument"}
Je ne suis pas sûr que je comprends la série d'événements le client est confronté ici. Le client charge une page à partir de l'App Engine application en Python. La page fait requête HTTP asynchrone à l'application avec des jQuery.ajax. L'application propose un 200 avec une bonne JSON corps. jQuery a mal interprété la réponse 404, et recharge la page? Est ce correct? Êtes-vous à l'aide de la Chrome Developer Tools pour vérifier les requêtes/réponses? Ce qui vous dit qu'il est la réception de la 404?
OriginalL'auteur Artaxerxes | 2013-12-24
Vous devez vous connecter pour publier un commentaire.
la réponse du serveur avec content-type: text\html et votre appel ajax s'attend à ce json. vous aurez besoin de définir l'en-tête de la réponse à Content-type: application/json. aussi, vous pourriez essayer de définir les en-têtes de votre appel ajax à accepter gzip données codées.
en php, vous pouvez le faire
avant de vous l'écho du json. Ou vous pouvez définir le type de l'appel ajax de texte, html.
il est également recommandé pour la chaîne de vos fonctions de rappel avec jquery comme
essayez de définir les en-têtes d'accepter gzip codé les réponses. mise à jour de ma réponse.
Eh bien, je vois dans sniffer qui demande envoyée par jQuery, c'est d'accepter gzip codé les réponses, co ça doit être quelque chose d'autre.
OriginalL'auteur kasper Taeymans