最近的工作中涉及到了下載機(jī)能,在做的過(guò)程中遇到了下面一些問(wèn)題。這些問(wèn)題都已經(jīng)解決了,但是對(duì)策肯定不是唯一,如果大家有好的對(duì)策,愿意共通研究。或者在下載過(guò)程中有什么其他需要注意的問(wèn)題,敬請(qǐng)留言。

           

          1、  下載完畢后不能夠重定向畫(huà)面。這種情況是發(fā)生在使用了frameset的畫(huà)面上。

          基本現(xiàn)象:
          點(diǎn)擊下載按鈕,下載執(zhí)行完畢后,再按其他的按鈕,會(huì)出現(xiàn)javascript錯(cuò)誤,不能夠找到原來(lái)畫(huà)面中的控件。原因就是因?yàn)橄螺d完畢后不能夠重定向到原來(lái)的畫(huà)面。

          原因及對(duì)策1
          提交的時(shí)候把提交的formtarget設(shè)定為top,這樣下載完畢后,頁(yè)面能夠重定向,就不會(huì)出現(xiàn)javascript代碼語(yǔ)法錯(cuò)誤的現(xiàn)象。同時(shí)使用這種方法能夠把下載過(guò)程中出現(xiàn)的錯(cuò)誤信息顯示在原來(lái)的畫(huà)面上。此時(shí)需要注意一點(diǎn),由于提交到的是top,所以出錯(cuò)返回的畫(huà)面也要是整個(gè)frame的畫(huà)面,同時(shí)還要保存原畫(huà)面用戶輸入的數(shù)據(jù),所以建議原來(lái)畫(huà)面的數(shù)據(jù)使用session來(lái)保存。
          function clickButton(){
              form.target = “_top”
              form.submit();
          }

          原因及對(duì)策2
          在當(dāng)前頁(yè)面添加一個(gè)內(nèi)禎用于下載使用,提交下載的form的時(shí)候可以把target指定到內(nèi)禎上,這樣不會(huì)影響到原來(lái)畫(huà)面,原畫(huà)面可以繼續(xù)操作。不過(guò)這種方法存在著弊端:一是很難使用javascript防止多重提交。二、如果下載過(guò)程中出現(xiàn)錯(cuò)誤,顯示錯(cuò)誤信息比較麻煩。鑒于上述兩種弊端使用這種方法一般是提交兩次,第一次正常提交把要下載的數(shù)據(jù)準(zhǔn)備好,保證下載能夠正常進(jìn)行,對(duì)于出錯(cuò)的處理也是在這一次進(jìn)行的;第二次提交是提交到內(nèi)禎,此次提交只是進(jìn)行下載直接,不考慮會(huì)出現(xiàn)錯(cuò)誤。這次提交是在onload中執(zhí)行的。
            <iframe name="download" style=” visibility:hidden”/>
          提交的時(shí)候使用下面的javascript
          function clickButton(){
              form.target = “download”;
              form.submit();
          }

          2、  不正常的下載現(xiàn)象。
          現(xiàn)象1
          windows2000操作系統(tǒng)下,有時(shí)候點(diǎn)擊下載,彈出下載對(duì)話框后點(diǎn)擊打開(kāi),會(huì)再次彈出打開(kāi)對(duì)話框。

          原因及對(duì)策:
          這可能是IE的安全設(shè)定產(chǎn)生的問(wèn)題,如果要解決這個(gè)問(wèn)題,也有辦法。我在反復(fù)的試驗(yàn)中發(fā)現(xiàn),出現(xiàn)這種現(xiàn)象的時(shí)候,提交下載的form中的數(shù)據(jù)在server端被用到,此時(shí)就會(huì)出現(xiàn)彈出兩次對(duì)話框的現(xiàn)象,如果沒(méi)有form中沒(méi)有數(shù)據(jù)或者form中的數(shù)據(jù)在server端不會(huì)被使用,那么就不會(huì)有這種現(xiàn)象,所以downloadform可以設(shè)定一個(gè)空的form。(如果考慮到netscape瀏覽器,form里面還要放上一個(gè)hidden控件,否則netscapeform提交不了。)這樣這種現(xiàn)象就不會(huì)出現(xiàn)了。
          <form name=”mainForm”>
             <input type=”button” name=”download” onclick=”clickButton()”>
          </form>
          <form name=”downLoadForm”>
             <input type=”hidden” name=”noUsed” />
          </form>
          使用的javascript如下:
          function clickButton(){
             downLoadForm.submit();
          }

          現(xiàn)象2
          windowsXP下,有時(shí)候下載會(huì)導(dǎo)致彈出安全制御的提示條。

          原因及對(duì)策:
          我所遇到的這樣的問(wèn)題產(chǎn)生的原因是,我是用了1中的對(duì)策2,在準(zhǔn)備完畢數(shù)據(jù)后,在onload方法中執(zhí)行了提交到內(nèi)禎的下載操作,結(jié)果出現(xiàn)了安全的提示條(頁(yè)面最上端)。對(duì)策方法就是不在onload提交下載的操作。

           

          3、  有關(guān)下載的性能問(wèn)題。

          如果下載的是固定的文件一般不會(huì)有問(wèn)題,我們可以通過(guò)File類的方法得到文件的長(zhǎng)度,然后分次寫(xiě)入到流就可以了。但是有時(shí)候下載的內(nèi)容可能動(dòng)態(tài)組成的,比如說(shuō)從數(shù)據(jù)庫(kù)檢索出來(lái)的等。在這種情況下,如果先從數(shù)據(jù)庫(kù)中檢索出所有的數(shù)據(jù),然后在把數(shù)據(jù)按照下載的格式編輯出來(lái),最后再算出長(zhǎng)度分次寫(xiě)入到流中,性能肯定不高。為了提交性能,我們可以這樣做,一次編輯一定數(shù)目的記錄,然后就向流中寫(xiě)入,這樣也是分次的寫(xiě)入到流中。在這種方式下,用戶能夠盡快看到下載的對(duì)話框,減少等待時(shí)間,同時(shí)也減少了下載過(guò)程中內(nèi)存的使用量,提高了下載的性能。

           

          上面三個(gè)問(wèn)題是我在使用struts框架做下載功能時(shí)遇到的一些問(wèn)題,以及自己的一些對(duì)策,供大家參考如果大家有更好的解決辦法,請(qǐng)賜教。

          posted on 2005-11-26 12:43 尋覓 閱讀(410) 評(píng)論(0)  編輯  收藏 所屬分類: web開(kāi)發(fā)

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          統(tǒng)計(jì)

          主站蜘蛛池模板: 陆河县| 新民市| 广南县| 保山市| 响水县| 邛崃市| 汪清县| 伽师县| 静宁县| 阿克苏市| 信宜市| 都匀市| 达孜县| 中江县| 夹江县| 江西省| 双鸭山市| 石首市| 铜梁县| 宜黄县| 特克斯县| 清镇市| 交口县| 浠水县| 大宁县| 湄潭县| 介休市| 莆田市| 电白县| 黄大仙区| 如东县| 肥城市| 无极县| 辽宁省| 德惠市| 靖宇县| 文成县| 克什克腾旗| 桂东县| 自治县| 宕昌县|