2013-08-13 2 views
0

Я использую цветную коробку и колбу JQuery. Когда пользователь нажимает значок, скрипт отправляет URL-адрес для отображения формы внутри colorbox. Когда пользователь нажимает кнопку «Сохранить», форма отправляется, а цветной ящик закрывается. Проблема в том, что я просто хочу закрыть окно, а не перезагружать экран, хотя это прекрасно работает, нет причин перерисовывать его. Я не понимаю, как вы ничего не возвращаете или ничего не делаете в представлении, которое заставляет экран перезагружаться. Вот код вида:Flask colorbox ajax

@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 вызывает пустой экран. Как я могу показать флягу, чтобы ничего не делать по возвращении?

+1

колбе не то, что перезарядка страницы. –

ответ

0

Проблема не в фляже ... «проблема» - это браузер (и косвенно - протокол HTTP). Если вы возвращаете ответ уровня 30X, браузер выдает новый запрос для URL-адреса переадресации прозрачно ... и в случае ответа 200 браузер отобразит то, что он получил конечному пользователю (в большинстве случаев). Это связано с тем, что redirect говорит, что «то, что вы ищете, действительно найдено на этом другом адресе», а 200 OK говорит: «Вы нашли то, что ищете, и вот оно».

Вы хотите вернуть 204 No Content, а не 200 OK:

return '', 204 

204 ответ говорит потребляющей сущности, «ничего нового здесь, я сделал то, что мне нужно, и я ничего не имею сказать вам об этом ». В браузере это приводит к тому, на котором был сделан запрос на странице.

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>