为了账号安全,请及时绑定邮箱和手机立即绑定

Django div 重新加载 - POST 后的 ajax GET 未获取最新的数据库模型实例

Django div 重新加载 - POST 后的 ajax GET 未获取最新的数据库模型实例

暮色呼如 2021-08-24 15:20:40
在类似聊天的应用程序中,我使用 ajax 调用来发布新消息并更新页面上显示的消息,而无需重新加载整个页面。我的 ajax 发布工作调用 - 在数据库中创建了一个新的消息实例。但是,之后当我进行 ajax 调用以获取所有消息时,结果查询集中缺少新消息。如果我完全刷新页面,我可以看到所有消息,但这不是我想要的。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 jsonfrom django.template import loaderfrom .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'        )有什么想法为什么我在 POST 后调用 ajax GET 时没有获得最新的数据库数据?谢谢!
查看完整描述

1 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

事实证明,如果我在 ajax“完成”调用而不是“成功”上进行聊天刷新,它会起作用:


$('#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;

}

感谢您的评论!


查看完整回答
反对 回复 2021-08-24
  • 1 回答
  • 0 关注
  • 238 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号