如何設計一個Django/Javascript應用程序來爲傳統的HTTP請求提供條件Ajax響應?Can Django/Javascript可以處理HTTP POST請求的條件「Ajax」響應嗎?
在服務器上,我有一個自定義的Form對象。當瀏覽器提交表單的數據時,服務器會根據現有數據和規則檢查提交的數據(例如,如果表單將某個實體添加到數據庫中,那麼該實體是否已經存在於數據庫中?)。如果數據通過,服務器將保存,生成一個ID號並將其添加到表單的數據,並將表單和數據傳回給瀏覽器。
if request.method == 'POST':
formClass = form_code.getCustomForm()
thisForm = formClass(data=request.POST)
if thisForm.isvalid():
saveCheck = thisForm.saveData()
t = loader.get_template("CustomerForm.html")
c = Context({ 'expectedFormObj': thisForm })
(請注意,我的自定義邏輯檢查是在SAVEDATA(),是由()由參考isValid完成的HTML驗證分開。)
到目前爲止,標準的Django(我希望)。但是如果數據不通過,我想發送一條消息給瀏覽器。我想saveData()可以將消息放入表單的屬性中,模板可以檢查該屬性,將其數據嵌入爲javascript變量,幷包含一個javascript函數以顯示消息。但是將所有形式的html傳遞回來,只是添加一條消息,似乎不夠雅觀(標準的Django表單提交過程也是如此,但沒關係)。在這種情況下,我想只傳回消息。
現在我想我可以將一個Javascript函數綁定到html表單的onsubmit事件,並且發出一個XMLHttpRequest,並讓服務器根據saveData()調用的輸出做出響應。但是,然後瀏覽器向未完成服務器發送兩個請求(POST和XHR)。也許一個成功的saveData()會重寫整個頁面並消除任何衝突的可能性。但我還得讓服務器按照對POST的響應順序排列對XHR的響應,並找出如何將saveData結果傳遞給對XHR的響應。我想這是可行的,即使沒有線程編程我不知道,但它似乎凌亂。
我推測我可能會使用JavaScript來使瀏覽器的響應有條件地響應POST請求(重寫整個頁面或僅顯示一條消息)中的某些內容。但我懷疑這個頁面的javascript手會通過POST請求控制瀏覽器,並且對POST的任何響應都會重寫頁面。
所以,我可以設計一個進程,只有在服務器端saveData()工作時才傳回整個表單,並且如果saveData()沒有重寫整個表單而顯示的消息不會顯示?如果是這樣,怎麼樣?
這可能太長。 – chernevik 2009-10-02 18:12:02