/ / Django-Ajax-Weiterleitung bei Formularübermittlung - Python, JQuery, Ajax, Django

Django Ajax Umleitung auf Formularübergabe - Python, Jquery, Ajax, Django

Ich versuche, Daten mit einer Ajax - Anfrage an zurückzugebenein Formular einreichen. Mein Ziel war es, zwei Ansichten zu verwenden, von denen eine das Laden der Vorlage und die andere die POST-Anforderung aus dem Formular handhabt. Im aktuellen Status wird das Formular an den JSON umgeleitet, der sich im Rückruf befindet. Das ist sinnvoll, da es sich um die Formularaktion handelt, auf die die URL verweist. Ich möchte jedoch nur die Daten an die aktuelle Seite übergeben und die Seite nicht erneut laden oder auf eine andere Seite umgeleitet werden.

Hier ist der Code:

user.html

<form action="{% url "ajax-user-post" %}" method="post">
{% csrf_token %}
{% for user in users %}
<input type="submit" name="name" value="{{ user }}">
{% endfor %}

views.py

def ajax_user(request):
# get some data..

if request.METHOD == "POST":
user = request.POST["user"]
user_data = User.objects.get(user=user)

data = {"user_data": user_data}
return JsonResponse(data)


def user(request):
return render(request, "user.html", context)

urls.py

url(r"^user/", user, name="user"),
url(r"^ajax/user/", ajax_user, name="ajax-user-post")

.js

$("form").on("submit", function(){
var name = // the name of the user selected
$.ajax({
type: "POST",
dataType: "json",
url: "ajax/user/",
data: { "csrfmiddlewaretoken": csrftoken, "name": name, "form": $form.serialize() },
success:function(data) {
// hide the current data
console.log(data);
displayUserData(data)
}
})
});

Danke für die Hilfe im Voraus!

Antworten:

4 für die Antwort № 1

Ich möchte nur die Daten an die aktuelle Seite übergeben und nicht die Seite neu laden oder auf eine andere Seite umgeleitet werden.

Das heißt, Sie müssen das Formularübermittlungsereignis mit der beenden event.preventDefault () Anruf.

Ändern Sie daher diese Zeile von:

$("form").on("submit", function(){

zu folgenden zwei:

$("form").on("submit", function(e){
e.preventDefault();