Аз се опитвам да върна данни с Ajax заявка наподаване на формуляр. Целта ми беше също да използвам два изгледа, един също да се справя с зареждането на шаблона, а другият да обработи заявката за POST от формуляра. В текущото състояние формулярът се пренасочва към JSON, който е в обратното повикване. Това има смисъл, тъй като е за посочване на URL адреса за действие, но искам просто да прехвърля данните към текущата страница и да не презареждам страницата или да бъдем пренасочени към друга страница.
Ето кода:
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)
}
})
});
Благодаря предварително за помощта!
Отговори:
4 за отговор № 1Искам просто да прехвърля данните към текущата страница и да не презареждам страницата или да бъдем пренасочени към друга страница.
Това означава, че трябва да спрете събитието за подаване на формуляра с event.preventDefault () обадете се.
Затова променете този ред от:
$("form").on("submit", function(){
до следните две:
$("form").on("submit", function(e){
e.preventDefault();