В приложении, похожем на чат, я использую вызовы ajax для POST нового сообщения и обновляю сообщения, отображаемые на странице, без перезагрузки всей страницы. Мой вызов ajax для публикации работает - в базе данных создается новый экземпляр сообщения. Однако впоследствии, когда я выполняю вызов ajax для GET всех сообщений, новое сообщение отсутствует в результирующем наборе запросов. Если я полностью обновлю страницу, я смогу увидеть все сообщения, но это не то, что мне нужно.
Шаблон сообщения HTML:
{% for message in messages %}
<p>
{{ message.content }}
</p>
{% endfor %}
HTML-шаблон чата:
<div id = "chat">
{% include "messages.html" %}
</div>
<form id = "post-message-form", method = "post" enctype = "multipart/form-data">
[my form goes here]
</form>
JavaScript:
$('#post-message-form').on('submit', function(event){
event.preventDefault();
$form = $(this);
var data = new FormData($form.get(0));
$.ajax({
url: '/post/a/new/message/',
type: 'POST',
data: data,
success: refresh_chat,
cache: false,
contentType: false,
processData: false
})
return false;
}
function refresh_chat(){
$.ajax({
url: '/get/all/messages/,
type: 'GET',
success: function(json) {
$('#chat').html(json['data']);
}
})
return false;
}
Взгляды:
import json
from django.template import loader
from .forms import MessageForm
# /post/a/new/message/
def post_message(request):
if request.method == 'POST':
form = MessageForm(request.POST)
if form.is_valid():
message = form.save()
return HttpResponse(
json.dumps({'status': 1,
'message': 'Message posted!'}),
content_type='application/json'
)
# /get/all/messages/
def get_messages(request):
if request.method == 'GET':
messages = loader.render_to_string('messages.html', context = {'messages': Message.objects.all(), 'form': MessageForm()})
return HttpResponse(
json.dumps({'data': messages}),
content_type='application/json'
)
Есть идеи, почему я не получаю последние данные из базы данных, когда вызываю ajax GET после POST? Спасибо!
Да, извините, это была опечатка. Но проблема не в этом.
Какую базу данных вы используете?
SQLite, настройка приложения Django по умолчанию.






Оказывается, если я обновляю чат с помощью вызова ajax "done" вместо "success", он работает:
$('#post-message-form').on('submit', function(event){
event.preventDefault();
$form = $(this);
var data = new FormData($form.get(0));
$.ajax({
url: '/post/a/new/message/',
type: 'POST',
data: data,
cache: false,
contentType: false,
processData: false
}).done(function() {
refresh_chat();
});
return false;
}
Спасибо за комментарий!
success: refresh_div- это должен бытьrefresh_chat?