Commande $ ajax et réponse Json

Dans mon application Django, j’essaie d’utiliser ajax afin de vérifier si un nom d’utilisateur existe déjà et d’afficher une erreur si c’est le cas.

Voici ce que j’ai

html:

{% csrf_token %}

js:

  $('#my_form').submit(function(){ var username = $('#username').val(); if (username == ''){ alert('please enter username'); return false; } $.ajax({ type: "POST", url: "/auth_validate", data: {'username': $('#username').val(), 'csrfmiddlewaretoken': '{{csrf_token}}'}, dataType: "text", success: function(response) { var response = $.parseJSON(response); if (response.success){ return true; } else{ alert(response.error); return false; } }, error: function(rs, e) { alert(rs.responseText); return false; } }); }) 

vues:

 def auth_validate(request): error = '' success = False if request.method == 'POST': username = request.POST.get('username', None) if not username: error = _('Please enter username') elif User.objects.filter(username__exact=username).exists(): error = _('Sorry this username is already taken') else: success = True ajax_vars = {'success': success, 'error': error} return HttpResponse(simplejson.dumps(ajax_vars), mimetype='application/javascript') 

Lorsque je saisis un nom d’utilisateur (s’il existe ou non), une alerte vide apparaît et lorsque je clique sur «ok», le formulaire est envoyé. De plus, les erreurs n’apparaissent pas.

Une idée sur pourquoi ça ne marche pas?

Merci de votre aide.

Votre vue et votre modèle ont une belle apparence. Nous vous suggérons d’utiliser le JSON natif qui gère la fonction et de sérialiser le formulaire au lieu d’envoyer les data manuellement. Veuillez également noter le return false à la fin du rappel d’événement, plutôt que dans les rappels de success et d’ error .

 $('#my_form').on('submit', function(){ var $form = $(this); $.ajax({ type: "POST", url: "/auth_validate", data: $form.serialize(), dataType: "json", success: function(response) { if (!response.success) { alert(response.error); } else { alert('This username is available!'); } }, error: function(rs, e) { alert(rs.responseText); } }); return false; }); 

Bonne chance 🙂

METTRE À JOUR:

S’il vous plaît vérifier le rest dans le rappel de succès;)

A cause de cette partie:

  var response = $.parseJSON(response); if (response.success){ return true; } else{ alert(response.error); } 

La réponse n’a pas de valeur ‘succès’, une boîte de dialog d’alerte emploi s’affiche. jQuery veille déjà à ce que cette vérification ne soit effectuée que lorsque la demande a été acceptée. Vous ne devez donc pas le faire.

Si vous ne souhaitez pas utiliser le navigateur submit de for, ajoutez return false; à la fin de votre fonction, préférez le comportement par défaut du navigateur.

À quoi ressemble le JSON auquel django répond?

Savez-vous quelle alerte est appelée? Est-ce celui dans la fonction d’erreur ou la fonction de succès?

Je ne pense pas que tu aies besoin de cette ligne

 var response = $.parseJSON(response); 

la réponse devrait déjà être JSON.