Obtenir les données POST sous forme django AJAX à partir de

Je vais obtenir une requête AJAX sous forme de paramètre dans Django. Voici ce que je fais:

base.html:

{% csrf_token %} First name:

main.js:

 $(document).ready(function(){ $("#register").live("click", function(e){ $.post("/", { name: "MY TEXT", }); }); }); 

views.py:

 from django.shortcuts import render_to_response from django.template import RequestContext from django.core.context_processors import csrf def home(request): if request.method == 'POST': print request.POST['name'] return render_to_response('registration.html', {}, context_instance=RequestContext(request)) 

Oui, je sais qu’à ce moment-là, mon JS n’obtient pas de données réelles sous forme de texte, il envoie juste un texte statique “MON TEXTE”. mais quand j’appuie sur le bouton, j’obtiens “MultiValueDictKeyError à /” La clé ‘nom’ est introuvable dans “”

Qu’est-ce que je fais mal?

J’ai changé de code: main.js

 $(document).ready(function(){ $("#register").live("click", function(e){ e.preventDefault(); $.post("/", { name:'MY TEXT' }); }); }); 

base.html:

 
{% csrf_token %} First name:

Ça marche , merci!

Bien que j’ai deux questions:

  1. Où est-ce que j’envoie ‘MON TEXTE’ dans ce cas? Je pense qu’il retourne les données réelles du champ de nom et ne renvoie pas “MON TEXTE”
  2. La page est toujours en cours de rechargement. Et je voulais le rendre complètement AJAX. Je veux dire créer une fonction python pour append des données de la demande POST à ​​la firebase database MySQL et renvoyer à AJAX-script le résultat de l’opération. Et tout sans recharger la page. Comment puis-je faire ceci?

En réalité, vous n’avez pas empêché l’action d’envoi par défaut du navigateur. Ainsi, votre POST Ajax est terminé, mais le navigateur lui-même POST immédiatement – et, comme le souligne Michal, votre formulaire n’inclut pas de champ de name . La recherche échoue donc.

Vous devez faire deux choses pour résoudre ce problème. Tout d’abord, utilisez e.preventDefault(); dans votre méthode de clic JS. Deuxièmement, recherchez request.is_ajax() en haut de votre écran.

Empêcher le formulaire de soumettre avec “e.preventDefault ()”. En outre, il est probablement préférable de se lier au formulaire uniquement si l’utilisateur appuie sur Entrée au lieu de cliquer sur:

base.html

 
{% csrf_token %} First name:

main.js

 $(document).ready(function(){ $("#register").live("submit", function(e){ $.post("/", { name: "MY TEXT", }); e.preventDefault(); }); }); 

Je suppose que le problème est que vous n’avez pas nommé l’entrée de texte dans HTML:

  

Je pense que ça devrait être

 $.post("../save_note/", { data:'name=MY TEXT' }); 

Et

 if 'name' in request.POST: 

Au lieu d’utiliser un gestionnaire de clic, vous pouvez configurer une fonction de soumission de formulaire plus robuste pour faire la même chose. Renvoyer false annule le comportement d’envoi par défaut.

 $("form").submit(function() { $.post("/", { name: "MY TEXT", }); return false; });