如何在Flask中重新加载包含错误的fancybox iframe表单
在Flask中有一个iframe显示一个带有fancybox的登录表单,它工作正常,但如果有错误我想重新加载表单。 问题是,当我提交有错误的表单时,它会在当前iframe中加载另一个iframe。 如何在当前iframe中加载表单。
@user.route('/signin', methods=['GET', 'POST']) def signin(): """ Login a user """ form = SigninForm(request.form) if request.method == 'POST' and form.validate(): username = form.username.data password = form.password.data if username: try: user = User.objects.get( username = username ) except User.DoesNotExist: form.username.errors = ['No such user or password'] context = {'form':form} return render_template('sign-in.html', **context ) else: form.username.errors = ['Enter a Username or Email address'] context = {'form':form} return render_template('sign-in.html', **context ) if user.check_password(password): login_user(user) return render_template( 'close-iframe.html' ) else: form.username.errors = ['No such user or password'] context = {'form':form} return render_template('sign-in.html', **context )
这是Jinja2模板
{% extends 'base.html' %} {% from "_formhelpers.html" import render_field %} {% block body_block %} {% endblock %}
这是我在主应用程序中的javascript。 它可以工作,除了我在iframe返回时无法更改iframe中的html
function send_ajax(e){ $.ajax({ type : "POST", cache : false, url: "/signin", data: $(this).serialize(), success:function(data) { var box = $('.fancybox-iframe').contents().find('html'); box.html(data); } }); return false; } $("#sign-in-form").bind( "submit", send_ajax ); $('.fancybox').fancybox({ onClose: function(){ window.location.reload() } });
和激活它的HTML是
Sign In
经过大量的实验,我终于明白了。
function send_ajax(e){ $.ajax({ type : "POST", cache : false, url: "/signin", data: $(this).serialize(), success:function(data) { parent.jQuery.fancybox(data); } }); return false; } $("#sign-in-form").on( "submit", send_ajax );
这只有一个问题。 如果输入错误的密码两次,则不会出现第二个窗口。