javascript - ajax的post之后如何强制重新渲染页面
黄舟
黄舟 2017-04-11 12:16:48
[JavaScript讨论组]

正在写一个web收藏的功能,用到了bootstrap的模拟层和ajax交互。用户可以选择文件夹进行收藏或自己新建一个。对于已建好的文件夹,直接点击文件名就收藏,后端设置了路由刷新页面无问题。然而新建文件夹后马上将当页的文章加入新建的收藏夹就出问题了,无法刷新页面。

            $('#create-collection-submit').on('click',(function(){
                $('#collections-intial-view').css('display', "block");
                $('#create-new-collection').css('display', 'none');  
                $.post($SCRIPT_ROOT +'/_create_collection/',
                    {'new_collection_name':$("p#create-new-collection input").val(), "post_id":(window.location.href).slice(27,-1)},function(feedback){
                        // $("p#feedback").html(feedback['flash']);
                    }
                )
            }))

这是javascript部分的,分别用了两个路由一个新建文件夹一个将文章加入文件夹,然而新建后最多控制到bootstrap modal消失但页面无法刷新。我试过window.location.reload()等等方法都是一闪而过。得人工按F5才会看到按钮的样式改变说明收藏成功了。

前端我用了jinja2模板,而且做了条件选择,收藏与否会渲染不同的html代码,我不清楚这是否会有影响。但要是在路由写跳回首页等等就会刷新页面。

html的代码:

 

{% if not current_user.collections.all() %} 创建第一个收纳盒 {% else %}

请选择保存文章的收纳盒 {% for collection in current_user.collections.all() %} {{ collection.collection_name }} {% endfor %} 你也可以新建一个收纳盒 {% endif %}

确认 取消

后端路由可能用不上,也贴上吧:

# Add post into collection
@main.route('/add_into_colletion//')
@login_required
def add_into_collection(coll_id, post_id):
    post = Post.query.get_or_404(post_id)
    if post in current_user.like_posts.all():
        flash('你已经收藏了该文章')
        return redirect(url_for('main.post', id=post.id))
    collection = Collection.query.get_or_404(coll_id)
    collection.posts_sort.append(post)
    current_user.like_posts.append(post)
    db.session.add(current_user)
    db.session.add(collection)
    flash('你已收纳了该文章')
    return redirect(url_for('main.post', id=post.id))

# Create collection and return message with json
@main.route('/_create_collection/', methods=['POST', 'GET'])
@login_required
def create_collection():
    new_collection_name = request.values.get('new_collection_name', None)
    post_id = request.values.get('post_id', None)
    if len(new_collection_name) < 2:
        return jsonify({'flash':'收纳盒的名称至少由两个字符组成'})
    if new_collection_name in [ item.collection_name for item in current_user.collections.all() ]:
        return jsonify({'flash':'收纳盒已存在'})
    else:
        new_collection = Collection(owner=current_user._get_current_object(),
                                    collection_name = new_collection_name)
        db.session.add(new_collection)
        db.session.commit()
        coll_id = new_collection.id
        return redirect(url_for('main.add_into_collection', coll_id=coll_id, post_id=post_id))
    return redirect(url_for('main.post', id=post_id))

我用了两张表,一张关系表是用户喜爱的所有文章,另外一张是用户的收藏夹,再建立关系表到文章的表。

我猜应该是ajax的问题,我也尝试用了on也是于事无补,求教,谢谢!

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(1)
大家讲道理

这问题不是很容易定位吗,改变样式就两行代码,然后这两行代码不是post回调成功才运行,那就是跟post和flask无关。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号