2013-08-13 1 views
0

Jquery colorbox와 플라스크를 사용하고 있습니다. 사용자가 아이콘을 클릭하면 스크립트는 url을 제출하여 colorbox 안에 양식을 렌더링합니다. 사용자가 저장 버튼을 클릭하면 양식이 제출되고 colorbox가 닫힙니다. 문제는 상자를 닫고 화면을 다시로드하지 않고도 작업을 다시 그릴 수있는 이유가 없다는 것입니다. 내가 이해하지 못하는 것은 화면을 다시로드하는보기에서 아무것도 반환하지 않거나 아무 것도하지 않는 것입니다. 보기 코드는 다음과 같습니다.플라스크 colorbox 아약스

@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 (A)보다 :

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>