0

我正在使用 Jquery colorbox 和烧瓶。当用户点击一个图标时,脚本会提交一个 url 以在颜色框内呈现表单。当用户点击保存按钮时,表单被提交并且颜色框关闭。问题是我只想关闭框,而不是重新加载屏幕,尽管效果很好,但没有理由重绘它。我不明白的是你如何不返回任何内容,或者在导致屏幕重新加载的视图中什么都不做。这是查看代码:

@listings.route('/notes/<string:find>',methods=['GET','POST'])
def notes( find = None ):
""" Ajax call to handle notes
"""
    find = Found.objects.get( pk = find )
    if request.method == 'GET':
        return render_template('note.html', find = find )

    if 'save' in request.form:
        find.notes = request.form['note']
        find.save()

    #return redirect( url_for('listings.landing', search=find.search.pk))
    return '',200

重定向会重新加载屏幕,返回 '',200 会导致屏幕空白。我如何告诉烧瓶在返回时什么都不做?

4

2 回答 2

0

问题不是 Flask ......“问题”是浏览器(间接是 HTTP 协议)。如果您返回30X级别响应,则浏览器会透明地发出重定向 URL 的新请求……在200响应的情况下,浏览器将向最终用户显示它收到的内容(在大多数情况下)。这是因为 aredirect说“你要找的东西实际上是在这个其他地址找到的”,而 a200 OK说“你找到了你要找的东西,就在这里”。

您将希望返回 a204 No Content而不是 a 200 OK

return '', 204

对消费实体的204回应是,“这里没有什么新鲜事,我做了我需要做的事,对此我没有什么要对你说的”。在浏览器中,这会导致发出请求的页面停留在屏幕上。

于 2013-08-14T05:29:52.087 回答
0

谢谢它的工作,我只是想分享我为最终让它工作所做的事情。我不得不使用这个

    .on('click', '#colorbox .cancel, #colorbox .note', function(e) {
    if ( $(this).attr('class') == 'note' )
        $('.notes').submit();

    $.colorbox.close();
    e.preventDefault();
})

html看起来像这样

<form action="{{url_for('listings.notes', find=find.pk)}}" method='post', class='notes'>
    <textarea  rows="4" cols="45" name='note'>{{find.notes|safe}}</textarea>
    <div class="bottom">
        <a href='#' class="cancel">cancel</a>
        <input type='submit' name='save' value='save' class='note'/>
    </div>
</form>

于 2013-08-14T20:14:56.330 回答