2011-06-30 2 views
2

Je l'ai testé à fond et je ne sais pas pourquoi il fait cela, donc je me demandais si quelqu'un pouvait expliquer ...Pourquoi json.dumps() lance-t-il une erreur interne du serveur 500 lors de l'utilisation de variables?

json.dumps() lance une erreur 500 interne du serveur lorsque j'essaie de utilisez une variable au lieu d'une chaîne.

Par exemple:

error = 'Login Failed: Your username or password is incorrect.' 
test = json.dumps({'form': error}) 

renvoie une erreur 500 interne du serveur lors d'une tentative de revenir par jQuery.ajax

Cependant,

test = json.dumps({'form': 'Login Failed: Your username or password is incorrect.'}) 

ne jetterai pas une erreur 500 interne du serveur . Je l'ai testé ceci à fond avec des guillemets simples, guillemets doubles, mise en forme différente, etc et tous les points à json.dumps()

Pour une raison quelconque, ce ne se produit que lorsque vous appelez la vue à travers jQuery.ajax

même si je ne retourne pas json.dump() et renvoie un objet json normal, il génère toujours une erreur 500, ce qui explique pourquoi j'ai conclu qu'il s'agit de json.dumps() et non de l'appel .ajax **

Voici un extrait de code supplémentaire où j'utilise ceci: Pour des raisons inconnues .. cela va lancer une erreur en appelant ce pa particulier ge par jQuery.ajax()

Oui .. même si la variable 'test' n'est pas retournée.

 elif(password == 'testing_this'): 
      error = 'Login Failed: Your username or password is incorrect.' 
      errors = True 

     test = json.dumps({'form': error}) 
     #print test 
     date = datetime.date.today() 

     if(errors == True): 
      return HttpResponse(json.dumps({'form': 'error message here'}), mimetype='application/json') 
     else: 
      return HttpResponse(json.dumps({'result': True}), mimetype='application/json') 
+3

Hey, si vous regardez l'erreur 500 dans la console Firebug et cliquez sur l'onglet « HTML », il vous montrera la sortie Django, et alors vous pouvez obtenir l'erreur spécifique. – bcoughlan

+0

idk si quelque chose me manque .. mais la fonction "inspecter l'élément" sur chrome ne montre rien et voici un lien vers la sortie firebug .. http://snapplr.com/k1me P.S. J'ai changé 'testing_this' en '1234567' dans mon exemple de capture d'écran – Chris

+0

Ne pensez pas que Chrome peut le faire. Dans l'onglet "Console" il montre les requêtes AJAX, et si vous cliquez sur le "+" à côté de la requête, il y aura un onglet "HTML" qui vous montrera la sortie. – bcoughlan

Répondre

0

Activer DEBUG dans les paramètres et effectuer un suivi peut être utile. Juste du mur, je peux supposer qu'avant cette vérification (if (errors == True) :) Vous pouvez oublier d'initialiser des erreurs avec la valeur initiale ainsi il lance NameError ... Mais c'est juste une hypothèse.

UPD: Désolé partie ajax glissé mon esprit - 1-waitinforatrain's commentaire

+1

ouais .. l'erreur est dans les coulisses afin que le débogage ne se présente pas .. trucs firebug collé dans un commentaire. seule chose que je remarque est "dataset undefined {}" mais je ne sais pas si c'est de l'appel ajax ou non – Chris

+0

Ce n'est pas du HTML que vous voulez inspecter - essayez l'onglet Réseau> sélectionnez la requête> Onglet Contenu - il doit y avoir une source de Django page de débogage. – Pill

+0

wow .. j'ai mal monté sur celui-ci ... je recevais un 500 parce que l'erreur n'a jamais été réglée. ma déclaration if l'attrapait. Je me suis dit que quelque chose d'autre était en désordre ... ça semblait trop bizarre. – Chris