1
In Flask有一個iframe顯示fancybox的登錄窗體,它工作正常,但如果有錯誤,我想重新加載窗體。問題是當我提交錯誤的表單時,它會在當前的iframe中加載另一個iframe。如何在當前的iframe中加載表單。我如何重新加載fancybox iframe窗體Flask中有錯誤
@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 %}
<body>
<div class="header">
<div class="wrapper">
<div id="sign-in-show"">
<div class="signin-form">
<div class="sign-up-in-tabcont" style="display: block;">
<form id="sign-in-form">
{{ form.csrf_token }}
<div class="form-single-row">
{{ render_field(form.username, id="email") }}
</div>
<div class="form-single-row">
{{ render_field(form.password, id="password") }}
</div>
<div class="form-single-row">
{{ render_field(form.submit, value='Login') }}
</div>
<div class="form-single-row">
<p class="forget-password">
<a href="{{url_for('user.forgot')}}">Forgot Password?</a>
</p>
</div>
</form>
<div class="clear"></div>
</div>
</div>
</div>
<div class="clear"></div>
<div class="header-outer"></div>
</div>
</div>
</body>
{% endblock %}
這裏是JavaScript我在主應用程序。它的工作原理,但我不能改變的HTML中的iframe,當它返回
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() } });
,並激活它
<a class="fancybox_signin" id="sign-in" href="{{url_for('user.signin')}}">Sign In</a>
你可以在有fancybox電話的地方發佈你的JavaScript代碼嗎?你是否已經用'target =「_ self」'或'target =「_ parent」'來試試這個表單? – Davebra
問題是,我打電話給你的成功函數的另一個fancybox,你打開一個ajax調用的結果fancybox,你有一個iframe類型的fancybox打開。 你可以嘗試使用'location.reload();'而不是'$ .fancybox(data);'來簡單地更新你的成功函數中iframe的內容嗎? – Davebra
我試過了,它只重載了原件。我也試過這樣做$('body',$('。fancybox-iframe')。contents())。html(data);看看它是否會改變框內的html,但它沒有 – CrabbyPete