io(ajax)和Django-update只工作一次,YUI可以';我再也找不到形式了
我正在使用YUI 3.0 io使用ajax提交表单数据。表单字段是从django视图(ModelForm)创建的。第一次加载表单时,我更新了一个字段,并使用YUI onclick提交表单,它调用io回调,运行django视图并再次返回带有更新数据的ModelForm。这只工作一次(保存到数据库,在表单上显示更新数据)。在那之后,就像更新表单字段不被识别一样,当我再次发布时,它不会接受任何新的更改io(ajax)和Django-update只工作一次,YUI可以';我再也找不到形式了,ajax,django,django-models,yui,Ajax,Django,Django Models,Yui,我正在使用YUI 3.0 io使用ajax提交表单数据。表单字段是从django视图(ModelForm)创建的。第一次加载表单时,我更新了一个字段,并使用YUI onclick提交表单,它调用io回调,运行django视图并再次返回带有更新数据的ModelForm。这只工作一次(保存到数据库,在表单上显示更新数据)。在那之后,就像更新表单字段不被识别一样,当我再次发布时,它不会接受任何新的更改 //Ajax call to Load Member Info YUI().use("node-ba
//Ajax call to Load Member Info
YUI().use("node-base", "io-form","node", function(Y) {
var formObj = Y.one('#MemberForm')
var uri = "http://localhost:8000/MemberInfo/{{ member_id }}";
var cfg = {
method:'POST',
form: {
id: formObj
}
}
function complete(id, o) {
var id = id; // Transaction ID.
var data = o.responseText; // Response data.
document.getElementById('InputDiv').innerHTML = data;//the data is the memberinfo html template w/ data
};
function start(transactionid, arguments)
{
document.getElementById('InputDiv').innerHTML = "processing...";
}
Y.on('io:complete', complete, this);
Y.on('io:start', start, this);
var request = Y.io(uri);//run callback on load. don't POST, just load'
function LoadMemberAjax()
{
Y.io(uri, cfg);//callback, POST.
}
Y.on("click", LoadMemberAjax, "#btnMemberInfo");
}
);
#Load Member Info - ajax call
def MemberInfo(request, member_id):
existingMember = get_object_or_404(Member, pk=member_id)
if request.method == "POST":
if 'userlogin' in request.POST: #we will get username and pwd from login and find person
NewMember = MemberForm(instance=existingMember)
else:
f = MemberForm(request.POST, instance = existingMember)
if f.is_valid():
f.save()
NewMember = MemberForm(instance=existingMember)
else:
NewMember = MemberForm(instance=existingMember)
return render_to_response("MemberInfo.html", {"Member": NewMember,})
HTML:
<body>
<form id="MemberForm">
<div id="InputDiv">Loading Your Member Information...One Moment...
</div>
<input type="button" id="btnMemberInfo" value="save">
</form>
我不太了解YUI,但我想这里发生的事情是,当AJAX重新加载表单时,它也会创建一个全新的按钮——它不再将onclick事件绑定到LoadMemberAjax。您可能需要重新绑定它,方法是重新运行
Y.on(“单击”,LoadMemberAjax,#btnMemberInfo”)代码>在完成功能的末尾
或者,您可以使用jQuery的live
调用来确保即使重新创建了元素,绑定仍然保持不变。我对YUI不是特别了解,但我想这里发生的事情是,当AJAX重新加载表单时,它还创建了一个全新的按钮,不再将onclick事件绑定到LoadMemberAjax。您可能需要重新绑定它,方法是重新运行Y.on(“单击”,LoadMemberAjax,#btnMemberInfo”)代码>在完成功能的末尾
或者,您可以使用jQuery的live
调用来确保即使重新创建了元素,绑定仍然保持不变。另一件需要注意的事情是,如果启用了CSRF中间件,它将进行类似于这种非功能性的重复post尝试。另一件需要注意的事情是,如果启用了CSRF中间件,它将进行类似于这种非功能性的重复post尝试。不,这没有帮助。该按钮位于ajax调用之外。形式也是如此。谢谢。不,这没用。该按钮位于ajax调用之外。形式也是如此。谢谢。看起来我没有启用中间件。是的。我想我会把它扔出去,以防其他人遇到这个问题并因此而绊倒。看起来我没有启用中间件。是的。我想我会把它扔出去,以防其他人遇到这个问题并因此而绊倒。
{% for field in Member %}
{{ field.label_tag }}
{{ field }}
{% endfor %}