À l'aide de appel Ajax pour mettre à jour une vue Django
Je suis nouveau sur Django, et je suis coincé en essayant d'obtenir une variable envoyé de l'ajax pour être utilisé dans le Django vue. Mon avis:
def index(request):
if (request.is_ajax()):
username = request.GET['user']
else:
username = ''
context = {'user':username}
return render(request, 'index.html', context)
et l'ajax:
$.ajax({
url: '/index/',
type: 'GET',
data: {user: response.name, page: page}
});
Mon problème est que username
n'est pas mise à jour dans la vue, basé sur l'appel ajax. Je sais que l'appel ajax fonctionne correctement, car en regardant la réponse au réseau il est de passage le bon nom d'utilisateur mis à jour.
Je crois que ce qui se passe c'est que la vue est chargée, puis de l'appel ajax et des mises à jour nom d'utilisateur, mais la vue n'est pas nouveau rendu et donc ne change pas. J'ai essayé de mettre un autre rendu après l'obtention de l'utilisateur, mais qui n'a pas changer quoi que ce soit, et j'ai aussi fait une vue séparée pour le traitement de l'appel ajax, mais cela ne semble pas fonctionner non plus, car la vue est toujours chargé sans requête ajax être vrai.
Quelle est la façon d'obtenir ce type de travail? Merci pour toute aide.
complete: function(resp) { ... }
à votre requête ajax, ce qui est resp.responseText
à l'intérieur de cette fonction?Désolé, un peu un newbie avec ajax. Si j'ai de la console.journal le texte de la réponse, il enregistre la mise à jour de la page index avec la nouvelle
username
. Donc, je dois recharger la page sur le succès?Vous serait probablement remplacer le DOM avec le nouveau DOM. Mais qui est extrêmement inefficace. Vous avez vraiment besoin de renvoyer simplement le nom d'utilisateur, et le mettre à jour. Regardez Brandon réponse pour obtenir de l'aide. où il a
console.log(json.user);
Faire quelque chose comme $('#username').html(json.user)
Se rapprocher. Merci
OriginalL'auteur mcw | 2014-01-07
Vous devez vous connecter pour publier un commentaire.
Si vous avez l'intention de retourner une réponse via Ajax JavaScript peut ensuite utiliser pour mettre à jour votre DOM, vous avez besoin de retourner un
HttpResponse
, de préférence au format JSON, qui peut être transmis à un gestionnaire dans votre $.appel ajax. Exemple:Puis dans votre JavaScript, vous pouvez le faire:
Avec cette approche, une normale requête GET à votre point de vue renvoie un rendu HTML du modèle. Pour une requête Ajax, l'affichage retourne un HttpResponse au format JSON qui est passée à la fonction de rappel dans le jQuery $.obtenez de l'appel.
json.dumps(response)
ligne.Désolé, c'est de ma faute. J'ai fait un peu de refactoring sur le nom de la variable de réponse. J'ai mis à jour ma réponse pour vous.
Génial, qui n'mise à jour le DOM correctement. Mais est-il possible que je peut avoir la mise à jour du nom d'utilisateur sera utilisé dans la vue? Comme en quelque sorte que la valeur et de l'utiliser pour la vue index. De l'index, à l'application, est en cours d'exécution d'une requête avec le nom d'utilisateur comme argument, et donc je me demandais comment faire pour obtenir ce nouveau nom d'utilisateur pour l'interroger par la suite. Merci pour votre aide si loin!
Vous pouvez faire ce que vous voulez avec le nom d'utilisateur envoyé via ajax dans votre point de vue. Il suffit d'ajouter votre code avant de le
HttpResponse
est retourné. Je vais mettre à jour le code d'exemple.Qu'il a fait. Depuis la requête retourne un objet queryset, aurais-je besoin pour ensuite faire la
json_response
un dict de toutes les valeurs? c'est à dire je ne peux pas simplement ajouteruser
à la dict, mais chaque propriété de façon indépendante, comme vous l'avez fait ci-dessus avec'user': {'some_prop': user.some_prop}
?OriginalL'auteur Brandon