2012-04-05 44 views
0

在這段代碼中;在http上刷新一個div後

def post(self): 
    chtml = displayhtml(public_key, error = None) 
    template_values = {'captchahtml': chtml} 
    path = os.path.join(os.path.dirname(__file__), 'main.html') 
    self.response.out.write(template.render(path, template_values)) 

當發出http post請求時,我可以使用給定的模板元素刷新整個頁面。

我的問題是如果它可能刷新只是一個div或iframe而不是整個頁面?

回答

1

是的,可以在請求期間刷新頁面的一部分。

但它需要瀏覽器端的一些應用程序或UI邏輯,以促進這一點。

一種方法是使用專用的iframe。將iframe看作瀏覽器窗口內的瀏覽器窗口。您可以將任何喜歡的內容插入到iframe中,並且可以獨立於頁面中周圍的內容來刷新iframe。 iframe方法經常用於周圍頁面的內容和iframe本身的內容來自不同地方的情況。例如,一個Facebook「喜歡小部件」使用來自Facebook的內容。很長一段時間,Facebook爲人們提供了一種嵌入其頁面的方式,一個包含類似小部件的iframe。通過這種方式,Facebook無論小部件嵌入什麼樣的頁面,都能夠保持對其圖像,品牌,外觀和感覺等的控制。

當框架的內容和周圍位的內容來自同一個來源 - 如你的appengine實例時,那麼你不需要一個iframe。你可以使用一個簡單的div,並異步更新它。

這種方法有時被稱爲AJAX--指的是異步JavaScript和XML。基本思想意味着從瀏覽器到服務器的異步請求(超出正常頁面刷新週期),以獲取內容;在JavaScript中實現的瀏覽器邏輯可以以任何方式更新UI。

與名稱相反,從這樣的異步請求發出XML作爲響應並非絕對必要。實際上,更常見的方法是使用JSON作爲數據格式。但是當然,使用這種設計模式時,服務器上的Python代碼通常不會返回格式化的HTML。它會以某種合理的格式(XML,JSON和其他)返回數據,然後在瀏覽器中運行的Javascript邏輯將在適當的位置將該數據呈現爲HTML。

在「標準」Web瀏覽器模型中,每頁請求發送一個HTTP請求(儘管可能會爲.css文件,圖像等發送附加請求),並且每個附加請求都意味着整頁刷新。在AJAX模型中,瀏覽器像以前一樣最初請求網頁,但可以異步發送其他HTTP請求,而無需完全刷新頁面。

+0

謝謝cheeso。 我想知道如何在我的代碼中使用ajax? – 2012-04-06 19:51:39

+0

您需要閱讀有關AJAX設計方法的基本教程。下面是一個很好的例子:http://www.ibm.com/developerworks/library/wa-aj-ajaxhistory/index.html AJAX在瀏覽器中使用;在服務器上使用Python並不重要。您需要在服務器上創建邏輯以響應來自瀏覽器的AJAX請求,但這非常簡單。 – Cheeso 2012-04-06 21:20:52