2010-02-15 5 views
0

J'ai 3 fonctions AJAX pour déplacer des données entre une application Django sur mon site Web et du JavaScript en utilisant YUI dans le navigateur. Il n'y a pas de différence majeure entre eux en termes de structure, de concept, de code, etc. 2 d'entre eux fonctionnent bien, mais dans le 3ème, je reçois une requête HTTP erronée immédiatement après la demande prévue. Ses données POST contiennent un sous-ensemble des données POST de la demande prévue. Les méta-données de la requête sont identiques à l'exception de CONTENT_LENGTH (évidemment) et de CONTENT_TYPE qui est 'text/plain'; charset = UTF-8 'pour l'application voulue et' application/x-www-form-urlencoded 'pour la requête non désirée. Je ne définis pas du tout explicitement le type de contenu, ce qui semble indiquer que les deux demandes n'ont pas la même origine et que la seconde ne fait que sortir de nulle part.Django: Comment traquer une requête HTTP?

La requête prévue définit HTTP_CACHE_CONTROL ':' no-cache 'et' HTTP_PRAGMA ':' no-cache ', le faux ne le fait pas. La sortie du journal du serveur de dev pour les deux demandes est

[15/Feb/2010 15:00:12] "POST /settings/ HTTP/1.1" 200 0 

Que signifie le dernier 0 à la fin? Impossible de trouver une documentation à ce sujet. Cette valeur est généralement non nulle ... Dans Apache, c'est la taille totale en octets de la réponse du serveur, quelqu'un peut-il confirmer que c'est la même chose pour Django?

Mon problème est évidemment de savoir d'où vient cette demande supplémentaire. Je suis assez familier avec le débogage JS en utilisant Firebug et je pense que je suis bon avec Python et Django, mais je ne connais pas beaucoup les internes des requêtes et des réponses HTTP. Je peux casser et passer par le code JS qui envoie la demande XMLHTTP prévue, mais ce point d'arrêt ne sera pas à nouveau frappé.

Le problème se produit à la fois avec FF3 et Safari, je suis sur Snow Leopard, donc je ne peux pas tester avec IE ou Chrome. J'ai regardé les techniques et les outils de débogage de Django comme http://robhudson.github.com/django-debug-toolbar/ mais je pense que j'ai déjà les informations qu'ils peuvent me donner.

Est-ce que quelqu'un peut vous conseiller sur une stratégie ou un outil pour réduire le problème?

+0

Le 0 à la fin est la taille de la réponse HTTP, IIRC. Et avez-vous Firebug ou un débogueur/inspecteur similaire activé? Il se pourrait qu'il y ait un double poste à cet égard. Alternativement, y a-t-il un rappel attaché à votre requête AJAX qui se déclenche et POST une fois l'appel principal terminé? –

+0

J'ai Firebug installé et je l'utilise pour analyser la requête HTTP dans l'onglet réseau, mais je vois la même erreur avec Safari ... A propos du rappel, je devrais verrouiller le code à nouveau (don 't have it here now), mais il doit y avoir du code qui envoie le xhr et aucun de mes points d'arrêt sur xhr.send (...) est atteint ... Jusqu'à présent, on dirait que la requête sort de nulle part. – ssc

+0

Vérifié à nouveau le code, il y a des rappels pour chacune des trois requêtes ajax, mais aucun d'entre eux ne déclenche une autre requête. En outre, j'ai remarqué dans l'onglet réseau Firebug que je ne peux voir que la demande erronée, pas celle voulue. Peut-être que c'est un bug de Firebug. – ssc

Répondre

1

La fonction AJAX problématique soumet des données de formulaire, les deux ne fonctionnent pas. Les formulaires ont une action par défaut qui a lieu lorsque le formulaire est soumis: publier une demande avec les données du formulaire. J'ai échoué à empêcher cette action par défaut.

Donc, la demande fausse est en effet sorti du sous-bois sombre du navigateur, il n'y a pas de code dans mes fichiers js qui l'envoie.

Solution:

YAHOO.util.Event.preventDefault(event); 

au début du formulaire soumettre gestionnaire d'événements.

Voir aussi http://developer.yahoo.com/yui/examples/event/eventsimple.html

Questions connexes