青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

qiezi的學習園地

AS/C/C++/D/Java/JS/Python/Ruby

  C++博客 :: 首頁 :: 新隨筆 ::  ::  :: 管理 ::
最近在使用RoR做項目,體會到了快速開發的樂趣,也遇到了一些困難,其中一個就是redirect_to。

我遇到的一個問題是,當使用Ajax更新頁面局部內容時,session內容已經過期,這時需要整個頁面跳轉到登錄頁面。

直接調用redirect_to會使局部內容顯示成登錄頁面,它是在HTTP頭里寫入重定向參數來實現的。在我這里的特殊情況下,正確的做法是讓它執行一個包含在<script>標記中的腳本,在腳本中更改窗口location值來跳轉。

不過RoR中使用Ajax時,會根據:update參數來決定是使用Updater還是Request。如果使用Updater方式,則應返回一段純腳本;如果是Request方式,應返回一段包括在<script>標記中的腳本;如果是普通方式,就應該使用原有的redirect_to函數了。因為服務端無法區分使用的是哪種方式來請求,所以簡單的做法是每個請求都附加一個參數用來區分,不加參數則是普通請求方式。

為了達到這個目的,我修改了prototype_helper中的remote_function函數。這個函數根據傳遞進來的參數來決定使用Request或是Updater,我就在這里下手:

??????def?remote_function(options)
????????javascript_options?
=?options_for_ajax(options)

????????update?
=?''
????????
if?options[:update]?and?options[:update].is_a?Hash
??????????update??
=?[]
??????????update?
<<?"success:'#{options[:update][:success]}'"?if?options[:update][:success]
??????????update?
<<?"failure:'#{options[:update][:failure]}'"?if?options[:update][:failure]
??????????update??
=?'{'?+?update.join(',')?+?'}'
????????elsif?options[:update]
??????????update?
<<?"'#{options[:update]}'"
????????end

????????function?
=?update.empty????
??????????
"new?Ajax.Request("?:
??????????
"new?Ajax.Updater(#{update},?"
????
????????url_options?
=?options[:url]
????????ajax_options?
=?options[:update]???{:ajax?=>?'update'}?:?{:ajax?=>?'request'}
????????url_options?
=
?url_options.merge(ajax_options)
????????url_options?
=?url_options.merge(:escape?=>?false)?if?url_options.is_a??Hash
????????function?
<<?"'#{url_for(url_options)}'"
????????function?
<<?",?#{javascript_options})"

????????function?
=?"#{options[:before]};?#{function}"?if?options[:before]
????????function?
=?"#{function};?#{options[:after]}"??if?options[:after]
????????function?
=?"if?(#{options[:condition]})?{?#{function};?}"?if?options[:condition]
????????function?
=?"if?(confirm('#{escape_javascript(options[:confirm])}'))?{?#{function};?}"?if?options[:confirm]

????????
return?function
??????end

有紅色的2行是我添加的,由于這個編輯器的原因,沒有顯示成整行紅色。這2行的作用是判斷是否有:update參數,用它來決定是添加ajax=update還是ajax=request。

現在可以實現一個簡單的auto_redirect_to了:

??def?auto_redirect_to(method,?url)
????
case?method
????when?
'request'
??????request_redirect_to(url)
????when?
'update'
??????update_redirect_to(url)
????
else
??????redirect_to(url)
????end
??end
??
??def?request_redirect_to(url)
????render?:update?
do?|page|
??????page.redirect_to(url)
????end
??end
??
??def?update_redirect_to(url)
????render?:inline?
=>?<<-EOS
??????
<script?language="javascript">
??????
<%=
????????render?:update?
do?|page|
??????????page.redirect_to(
"#{url_for(url)}")
????????end
??????
%>
??????
</script>
????EOS
??end

使用helper方式使它能夠被include到ApplicationController中就行了。

為了不和參數綁得太死,這里把method作為參數由調用者傳入。

使用方法,以Login Engine為例,它在access_denied中處理跳轉。在ApplicationController中重寫這個函數:

????def?access_denied
??????auto_redirect_to(
params[:ajax],?:controller?=>?"/user",?:action?=>?"login")
??????
false
????end??

現在可以測試了。請求可以是普通的(超鏈接),Updater方式(請求到一個DIV里),Request方式,現在都能夠跳轉到正確頁面。

ajax參數通過hack庫代碼來實現,對于使用者來說基本上是透明的。
posted on 2006-05-20 02:33 qiezi 閱讀(509) 評論(0)  編輯 收藏 引用 所屬分類: 自家破爛Ruby
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久av一区二区三区| 久久影视精品| 99热免费精品在线观看| 美脚丝袜一区二区三区在线观看 | 欧美激情国产精品| 亚洲另类在线一区| 日韩视频―中文字幕| 欧美三级精品| 久久久www成人免费毛片麻豆| 欧美一区二区三区电影在线观看| 激情综合网址| 亚洲欧洲日产国产综合网| 免费观看亚洲视频大全| 亚洲天堂男人| 久久国产一区二区三区| 亚洲人成网站999久久久综合| 99热这里只有精品8| 国产精品入口日韩视频大尺度| 久久九九99视频| 欧美精品18videos性欧美| 先锋影音国产精品| 久久在线视频| 欧美一区二区三区在线| 久久久久这里只有精品| 在线午夜精品自拍| 久久黄色影院| 亚洲免费中文字幕| 欧美aⅴ99久久黑人专区| 亚洲在线视频观看| 亚洲在线1234| 欧美大色视频| 久久精品一二三| 欧美日韩一区二区欧美激情| 另类天堂视频在线观看| 欧美午夜a级限制福利片| 免费不卡在线观看av| 欧美香蕉视频| 亚洲精品欧美激情| 永久免费毛片在线播放不卡| 亚洲色诱最新| 一区二区三区精品视频| 美日韩精品视频| 久久久久久亚洲精品杨幂换脸 | 午夜国产欧美理论在线播放 | 国产精品成人一区| 亚洲精品一区二区网址| 亚洲国产精品一区二区www在线| 亚洲资源在线观看| 中文在线资源观看网站视频免费不卡 | 久久成人精品无人区| 亚洲自拍电影| 欧美日韩视频在线一区二区| 欧美激情第六页| 国内免费精品永久在线视频| 亚洲一区二区三区成人在线视频精品| 亚洲精品1234| 麻豆精品精华液| 另类人畜视频在线| 极品尤物av久久免费看| 久久国产日韩| 麻豆精品视频在线观看视频| 国产婷婷色一区二区三区四区| 亚洲一卡二卡三卡四卡五卡| 亚洲欧美资源在线| 国产精品综合| 欧美一区成人| 久久免费精品视频| 国产在线拍偷自揄拍精品| 校园春色综合网| 久久人人97超碰精品888| 国产一区二区日韩精品欧美精品| 香蕉久久国产| 免费在线国产精品| 亚洲人久久久| 欧美日韩国产精品专区| 夜夜嗨一区二区| 性色av香蕉一区二区| 国产视频久久网| 久久久精品国产一区二区三区| 乱人伦精品视频在线观看| 在线成人亚洲| 欧美另类亚洲| 午夜久久久久久| 暖暖成人免费视频| 99精品热6080yy久久| 国产精品乱子久久久久| 久久久99爱| 亚洲激情偷拍| 午夜在线视频一区二区区别| 国内久久精品视频| 欧美日韩国产首页在线观看| 亚洲综合电影| 亚洲二区免费| 女人天堂亚洲aⅴ在线观看| 亚洲高清视频的网址| 亚洲神马久久| 一区二区三区中文在线观看| 欧美日韩黄视频| 欧美一级视频| 亚洲九九爱视频| 久久亚洲午夜电影| 亚洲在线视频观看| 亚洲第一福利视频| 国产精品美女www爽爽爽| 久热精品视频在线观看一区| 一本久久青青| 亚洲福利视频网| 欧美一级大片在线免费观看| 亚洲精品国产欧美| 国产在线成人| 国产精品爽黄69| 欧美巨乳在线| 久久综合导航| 欧美自拍偷拍午夜视频| 日韩午夜av在线| 亚洲电影在线观看| 免费观看不卡av| 欧美亚洲一区二区在线观看| 日韩视频免费看| 亚洲电影第1页| 国产专区欧美专区| 国产精品一二一区| 欧美日韩1234| 欧美激情综合网| 久热精品视频在线免费观看| 欧美专区一区二区三区| 亚洲午夜久久久久久久久电影网| 亚洲人成人一区二区在线观看| 玖玖视频精品| 久久综合999| 久久亚洲精品视频| 久久全国免费视频| 久久久久久国产精品mv| 欧美一区二区三区的| 午夜精品一区二区三区在线| 一区二区三区产品免费精品久久75| 亚洲国产日韩综合一区| 亚洲高清视频的网址| 在线欧美福利| 91久久黄色| 亚洲精品国产无天堂网2021| 亚洲高清在线精品| 91久久香蕉国产日韩欧美9色| 亚洲经典三级| 宅男噜噜噜66一区二区| 99热免费精品在线观看| 中文av一区特黄| 亚洲一二三级电影| 午夜欧美大片免费观看| 午夜一级在线看亚洲| 欧美一二三视频| 久久福利资源站| 久久视频在线视频| 欧美韩国一区| 亚洲精品欧美一区二区三区| 99在线精品免费视频九九视| 一个色综合av| 欧美专区福利在线| 卡一卡二国产精品| 欧美美女福利视频| 国产精品日韩精品| 极品中文字幕一区| 一区二区久久| 午夜老司机精品| 久久久久在线观看| 亚洲国产日日夜夜| a4yy欧美一区二区三区| 午夜国产欧美理论在线播放| 久久精品在线| 欧美日韩性视频在线| 国产欧美日韩激情| 在线精品亚洲一区二区| 一本色道久久综合亚洲精品不卡| 亚洲午夜精品一区二区| 久久久久国产一区二区| 亚洲电影视频在线| 亚洲女人天堂av| 可以免费看不卡的av网站| 欧美日韩视频在线| 在线观看精品视频| 亚洲欧美日本伦理| 国产欧美精品在线| 亚洲日本欧美天堂| 欧美专区日韩专区| 亚洲国语精品自产拍在线观看| 亚洲欧美一区二区原创| 蜜桃伊人久久| 国产视频亚洲精品| 一区二区免费在线播放| 久久色中文字幕| 宅男噜噜噜66国产日韩在线观看| 久久久久久亚洲精品不卡4k岛国| 欧美日韩精品一区二区三区| 国内精品久久久久久久影视麻豆| 一区二区三区免费在线观看| 免费永久网站黄欧美| 香蕉av777xxx色综合一区| 国产精品扒开腿爽爽爽视频| 亚洲精品视频在线| 欧美成人在线免费视频|