發送POST請求的能力我有一個包含對象的形式:窗體失去後2個AJAX更新
<form method="post" class="object_form" id="event-core-form" action="{% url save_event_core_data event.id %}" enctype="multipart/form-data">
{{ form.as_p }}
<p>
<input class="object-submit" id="object-data-save" type="submit" value="Save data">
</p>
</form>
打「提交」按鈕,我跑這個腳本,它通過AJAX,更新數據提交我的表格後並應返回更新的形式,將它插回位:
$("#object-data-save").livequery("click", function(e) {
e.preventDefault();
$(this).parents("form:first").ajaxSubmit({
data: {"action": action},
"success": function(data) {
data = JSON.parse(data);
$("#core-data").html(data["html"]);
$("#message").show();
$("#message").fadeIn(400).html('<span>'+data["message"]+'</span>');
setTimeout(function(){
$("#message").fadeOut("slow", function() {
$("#message").hide();
});
}, 1500);
}
});
return false;
});
這種運行以下功能:
def event_core_data(request, event_id):
template_name="management/core_event.html"
event = Event.objects.get(pk=event_id)
form = EventForm()
if request.method == "POST":
form = EventForm(instance=event, data=request.POST)
message = _("Error saving data")
if form.is_valid():
form.save()
message = _(u"Data saved.")
html = render_to_string(template_name, RequestContext(request, {
"form" : form,
"event" : event,
}))
result = simplejson.dumps({
"html" : html,
"message" : message,
}, cls = LazyEncoder)
result = HttpResponse(result)
logging.debug(result)
else:
form = EventForm(instance=event)
result = ""
try:
result = render_to_string(template_name, RequestContext(request, {
"form" : form,
"event" : event,
}))
except:
pass
return result
保存之後,一切都按預期工作。但第三次更新後,我的表單不會插入到父模板中。相反,我被重定向到編輯函數的url,表單被渲染爲一個原始的html。此外,我注意到在螢火蟲,當我被重定向 - 沒有發送POST和我的JavaScript中的虛擬'警報'沒有被解僱。 這是顯示初始狀態的功能(如果它的任何幫助):
def manage_event(request, event_id,):
template_name = 'management/edit_event.html'
try:
event = Event.objects.get(pk=event_id)
except DoesNotExist:
url = reverse("manage_events")
return HttpResponseRedirect(url)
return render_to_response(template_name, RequestContext(request, {
"core_data" : event_core_data(request, event_id),
"event" : event,
}))
編輯
下面是測試鏈接到這個項目,在這裏你可以看到發生了什麼事情。 'event_core_data'在成功更新時將request.POST返回到控制檯。
http://ntt.vipserv.org/manage/events/2
我也想知道爲什麼提交後,我的日期選擇控件消失。這些東西以某種方式連接在一起?
EDIT 2
我使用。員額已經嘗試過或阿賈克斯,而不是.ajaxSubmit但沒有任何運氣。
因此,第二次更新表單不再作爲發佈後發送。這是可能的,任何想法? – owca 2010-10-29 16:05:32
我強烈建議使用1)Firefox,2)Firebug。啓用Firebug,然後重新加載頁面。查看控制檯以查看*完全*服務器返回的內容。斷點也很有用。 – 2010-10-29 18:21:37
id ='object-data-save'< - 在這裏使用相同的引號:P – 2010-10-29 19:28:10