Я создал сайт, на котором пользователи могут публиковать сообщения. После использования Ajax для создания объекта записи кажется, что мне это не нравится. В основном мое представление django возвращает пустую JsonData. Поэтому мне нужно обновить страницу sh, чтобы она заработала. Ниже приведено то, что я использую для отправки моих ajax вызовов.
для создания сообщения:
var SaveForm = function(e){
e.preventDefault();
e.stopImmediatePropagation();
var form = new FormData(this);
$.ajax({
url: $(this).attr('data-url'),
type: $(this).attr('method'),
data: form,
cache: false,
processData: false,
contentType: false,
dataType: 'json',
success: function(data){
if(data.form_is_valid){
$('#post-list div').html(data.posts);
$('#modal-post').modal('hide');
} else {
$('#modal-post .modal-content').html(data.html_form)
}
$('.post-like-form').on("click", ".likeBtn", function (e) {
var like_count = $(".input-like-count", this).val();
$(".like-count-d").text(like_count);
e.preventDefault();
if($(this).find("i").hasClass("fa-thumbs-up")){
like_count++;
$(".input-like-count", this).val(like_count);
$("i", this).removeClass("fa-thumbs-up").addClass("fa-thumbs-down")
$(".like-count", this).text(like_count);
$(".like-count-d").text(like_count);
} else {
like_count--;
$(".input-like-count", this).val(like_count);
$("i", this).removeClass("fa-thumbs-down").addClass("fa-thumbs-up")
$(".like-count", this).text(like_count);
$(".like-count-d").text(like_count);
}
var tk = $(this).attr("data-token");
var pg = $(this).attr('value');
$.ajax({
type: "POST",
url: $(this).attr("data-url"),
dataType: 'json',
data: {'guid_url': pg, 'csrfmiddlewaretoken':tk },
success: function (data){
var like_count = parseInt($(".like-count", this).text());
if($(this).find("i").hasClass("fa-thumbs-up")){
like_count++;
$(".input-like-count", this).val(like_count);
$("i", this).removeClass("fa-thumbs-up").addClass("fa-thumbs-down")
$(".like-count", this).text(like_count);
} else {
like_count--;
$(".input-like-count", this).val(like_count);
$("i", this).removeClass("fa-thumbs-down").addClass("fa-thumbs-up")
$(".like-count", this).text(like_count);
}
$("#post-detail-container div").html(data.post_detail)
},
error: function(rs, e){
console.log(rs.responeText);
},
});
});
}
})
return false;
}
, который успешно создает объект сообщения (в основном это занимает много времени Ajax запрос занимает много времени). После того, как сообщение создано, я больше не могу любить сообщения, если я не переосмыслил sh страницу!
Вот мой звонок как js ajax (который, я считаю, не вызывает проблемы, поскольку он работает если вы ссылаетесь sh на страницу:
$(document).ready(function (e) {
$('.post-like-form').on("click", ".likeBtn", function (e) {
var like_count = $(".input-like-count", this).val();
$(".like-count-d").text(like_count);
e.preventDefault();
if($(this).find("i").hasClass("fa-thumbs-up")){
like_count++;
$(".input-like-count", this).val(like_count);
$("i", this).removeClass("fa-thumbs-up").addClass("fa-thumbs-down")
$(".like-count", this).text(like_count);
$(".like-count-d").text(like_count);
} else {
like_count--;
$(".input-like-count", this).val(like_count);
$("i", this).removeClass("fa-thumbs-down").addClass("fa-thumbs-up")
$(".like-count", this).text(like_count);
$(".like-count-d").text(like_count);
}
var tk = $(this).attr("data-token");
var pg = $(this).attr('value');
$.ajax({
type: "POST",
url: $(this).attr("data-url"),
dataType: 'json',
data: {'guid_url': pg, 'csrfmiddlewaretoken':tk },
success: function (data){
var like_count = parseInt($(".like-count", this).text());
if($(this).find("i").hasClass("fa-thumbs-up")){
like_count++;
$(".input-like-count", this).val(like_count);
$("i", this).removeClass("fa-thumbs-up").addClass("fa-thumbs-down")
$(".like-count", this).text(like_count);
} else {
like_count--;
$(".input-like-count", this).val(like_count);
$("i", this).removeClass("fa-thumbs-down").addClass("fa-thumbs-up")
$(".like-count", this).text(like_count);
}
$("#post-detail-container div").html(data.post_detail)
},
error: function(rs, e){
console.log(rs.responeText);
},
});
});
})
Это мои взгляды на симпатию и создание сообщения:
@login_required
def post_create(request):
data = dict()
if request.method == 'POST':
form = PostForm(request.POST)
if form.is_valid():
post = form.save(False)
post.author = request.user
post.save()
if request.FILES is not None:
added = []
images = request.FILES.getlist('images[]')
for i in images:
if i not in added:
print(i)
image_instance = Images.objects.create(image=i,post=post)
image_instance.save()
added.append(i)
data['form_is_valid'] = True
posts = Post.objects.all()
posts = Post.objects.order_by('-last_edited')
data['posts'] = render_to_string('home/posts/home_post.html',{'posts':posts},request=request)
else:
data['form_is_valid'] = False
else:
form = PostForm
context = {
'form':form,
}
data['html_form'] = render_to_string('home/posts/post_create.html',context,request=request)
return JsonResponse(data)
@login_required
def post_like(request,guid_url):
data = dict()
post = get_object_or_404(Post, guid_url=guid_url)
user = request.user
if post.likes.filter(id=user.id).exists():
post.likes.remove(user)
else:
post.likes.add(user)
#posts = Post.objects.all()
#posts = Post.objects.order_by('-last_edited')
#data['posts'] = render_to_string('home/posts/home_post.html',{'posts':posts},request=request)
if request.is_ajax():
guid_url = post.guid_url
data['post_detail'] = render_to_string('home/posts/post_detail.html',{'post':post,'guid_url':guid_url},request=request)
return JsonResponse(data)
, что происходит после публикации, когда мне нравится публикация переходит к post_like url, а не просто к посту. Я не знаю, что вызывает эту проблему, поскольку я не получаю ошибок ни в консоли, ни в терминале.
Я заранее благодарен за всю помощь!