2013-12-15 36 views
1

使用web2py(2.8.2-stable + timestamp.2013.11.28.13.54.07),我該如何構建一個視圖中的鏈接執行函數,但不會離開當前頁面?web2py:鏈接執行功能,而不導航到不同的頁面(回調?)

web2py OnLine book指出,對於在視圖中使用的內置幫助器A()的調用:'而不是_href,可以使用回調參數傳遞URL。 。 。按鏈接的效果將是ajax調用「myaction」而不是重定向。 (我對「重定向」的理解是將瀏覽器導航到不同的頁面)。然而,web2py的視圖源(在一個循環內):

{{=A('why does this callback redirect?', callback=URL('PlayAnAlbum2', vars = dict(album_folder = album_folder, type = 'artists')))}} 

並執行所期望的功能,而且還重定向到指定的功能的任一視圖,或組成是「無」,如果函數沒有按」的網頁的t返回任何東西。我想點擊鏈接只執行一個函數,而不是加載一個不同的視圖(所以沒有視圖是必需的,我希望函數不需要返回任何東西,除了函數是否遇到任何錯誤)。所生成的源的例子如下:

<a data-w2p_disable_with="default" data-w2p_method="POST" href="/AlbumBrowser/default/PlayAnAlbum2?album_folder=Jaga+Jazzist%2F2003+The+Stix&amp;type=artists" id="10aa76bd-c4bf-4701-a0da-1ebfed7847cc">why does this callback redirect?</a> 

但是我預期類似如下(我做這件事鬆散的基礎上的代碼this question所以可能沒有意義):

<a href="#null" onclick="ajax('/AlbumBrowser/default/PlayAnAlbum2',['album_folder','type'],None);return false">why does this callback redirect?</a> 

我可以確認{{include 'web2py_ajax.html'}}是在佈局頭,<script src="/AlbumBrowser/static/js/web2py.js" type="text/javascript"></script>是在生成的頁面源。

+0

自創建此應用程序以來,您是否升級了web2py?如果是這樣,那麼您的web2py.js文件可能已過期。嘗試將其更新到最新版本。您觀察到的生成的HTML源代碼是正確的,應該可以工作(web2py.js中的代碼標識與data-w2p_method屬性的鏈接並將它們轉換爲Ajax調用)。 – Anthony

+0

我從2.7.4升級到2.8.2。因爲此應用程序基於'歡迎',我還試圖更新此應用程序中可能需要它的文件(靜態的js和css,web2py_ajax.html和視圖中的generic。*)。鏈接仍然會重定向到包含文本'無'的頁面,其中包含與被調用函數的視圖相對應的URL。 – DaveUU

回答

1

正如問題和the web2py book中所述,使用callback=URL()而不是_href=URL()A()之內。

這絕對適用於web2py 2.8.2。

+0

感謝安東尼。這在2.7.2中並不適用於我,但在升級後仍然有效。 。 。但不是立即(!)我回答了我自己的問題,以確認問題不在web2py中,並且所描述的代碼是正確的方法。如果這是不好的禮節讓我知道,我會刪除答案。我曾經使用過一個外部編輯器,因此我對於行爲不當的應用程序的建議是(i)更新web2py(顯然在發佈問題之前!)(ii)通過web2py的管理設施中的「創建新應用程序」按鈕重新構建應用程序並粘貼代碼到web2py的IDE。 – DaveUU

+0

以防我的函數返回SCRIPT(「alert('some random text)」)如何在警告窗口中單擊Ok按鈕後阻止重定向? – Yebach