烧瓶colorbox ajax

时间:2013-08-13 18:25:06

标签: jquery ajax flask colorbox

我正在使用Jquery彩盒和烧瓶。当用户点击图标时,脚本会提交一个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导致空白屏幕。如何告诉烧瓶在退货时什么都不做?

2 个答案:

答案 0 :(得分:0)

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

您需要返回204 No Content而不是200 OK

return '', 204

204响应对消费实体说:“这里没什么新东西,我做了我需要的东西,我没有什么可以对你说的”。在浏览器中,这会导致请求所在的页面停留在屏幕上。

答案 1 :(得分: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>