Re: [問題] 一個 JS 的系統問題

看板Ajax作者時間15年前 (2009/01/15 18:37), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/7 (看更多)
※ 引述《danny0838 (道可道非常道)》之銘言: : 在下想做的是一套簡單的電子書系統,大概有幾個要求: : 1. 使用者只需要 IE 或 Fx 等網頁瀏覽器就能執行,不需安裝額外軟體。 : 2. 承上,所以希望整套網頁系統只用到 JS, CSS, HTML, XML 之類的, : 目前沒用過 JQuery,如果有需求會嘗試看看。 : 3. 整套系統可以全套在本機電腦上執行,也可以放在伺服器上,供使用者連線使用。 我想請教一下這個需求的用意是? 如果你要讓使用者在自己的電腦上使用,那麼以 HTML 和 Javascipt 為 基礎的 HTML Application,可以很簡單的達成你的要求。 如果你要放在伺服器上,單純的 HTML 加 Javascript 頂多讓使用者可以瀏覽而已, 如果要能編輯,甚至是你的資料檔不想讓使用者(透過輸入網址的方式)直接取得, 則必須搭配 php 等伺服器端的程式才能達成。 不管怎麼樣,硬要寫在一起,只是徒增維護和撰寫的複雜度而已。 不過如果你只是想做單純的瀏覽,不需要編刪的動作,那倒是勉強可以寫在一起。 只是取得資料檔列表的方式,伺服器端跟本機端要分開處理,其他部分倒可一起套用。 : 4. 架構大致分為 : (1) 網頁程式系統(JS, HTML, XML) : (2) 資料檔(很多,一個檔就是一本電子書) : 5. 流程大致為: : 開啟程式 : ↓ :   呈現操作介面和資料檔列表 : ↓ : 使用者選取操作方式,以及資料檔  ←   : ↓ ↑ : 程式載入必要的資料檔,分析並呈現結果 → : 問題大概有幾個: : 1. 本程式一開始是不會讀入所有資料檔的。 : 程式開啟時,要呈現出一個列表,列出所有資料檔,讓使用者去選擇。 : 就在下所知,如果要讀取伺服器的「某資料夾下的所有檔案」,必須使用 AJAX, 在本機是可以取得自己電腦的檔案結構啦。 至於單純使用 AJAX 就可以讀取伺服器的檔案結構... 如果你這麼認為的話,可能你的觀念還要再加強一下喔。 : 但 AJAX 不能純粹在本機運作,因此不宜; 在本機的話,HTML Application 有更直接的方法可以取得檔案列表。 : 而如果要讀取本機「某資料夾下的所有檔案」,必須使用 ActiveX, 我想簡單提一下,如果 client 要動用 server 的資源,除非該資源是公開的、 透過網址就可以直接取得的,否則單靠 AJAX / Javascript 辦不到, 同時要搭配如 php 之類的程式語言才行。 而 server 要動用 client 的資源,則是靠著 JAVA 或是 ActiveX 之類的來達成。 所以看到這邊我開始有點疑惑,你的要求是程式在本機跟伺服器都能執行, 然後資料檔全部都是放在使用者的電腦上嗎? : 但 ActiveX 不能在純粹在伺服器運作,因此也不宜。 ActiveX 本來就不是給伺服器用的。 : (另外,ActiveX 似乎只有 IE 支援) 沒錯,要跨平台、跨瀏覽器的話,請考慮用 JAVA。 : 不知以上認知是否錯誤? : 因此,除了資料檔以外,在下是否必須另外製作一個資料檔的路徑列表? 簡單講是這樣沒錯... : 2. 承上,在上述限制下,有什麼方法可以根據使用者的操作, : 動態載入使用者想開啟的資料檔? 從傳統的單純超連結,到新的 AJAX 技術,都可以達到你的要求吧。 : 目前在下的做法是建立一個隱藏的 iframe 去讀資料檔, : 但 iframe 的載入似乎需要時間, : 無法在載入的程式碼後面立刻抓取框架內容,否則會出錯。 這邊我不是很瞭解為什麼你會選擇這樣做? 如果你是以 AJAX 做的話,步驟大概像這樣: 使用者觸發讀取某一個資料檔的事件 -> 透過 AJAX 技術取得該資料檔的內容 -> 根據某些規則(如 BBCode 轉 HTML)產生要輸出的 HTML 原始碼 -> 將這個結果放到某個 division 裡面,這樣就完成了 按照這樣來講,根本不需要用到 iframe,更不用去等待、確認讀取完成、再 取得該 frame 的內容(更何況,你打算怎麼取得整個框架的內容)。 : 另外,在下希望資料檔格式盡量簡單,讓不懂網頁語法的使用者也能自由編輯, : 所以最好可以是 txt 或 xml... 最簡單當然是 txt,使用者程度夠的話,建議以 html 來做就可以了, xml 我是覺得不很必要,除非你打算順便紀錄諸如文章日期等等的額外資訊。 : 在下想問的是: : 如何讓主程式在 iframe 載入完成時,知道 iframe 已載入完全, : 然後分析並呈現其結果? : 或者,有比 iframe 更好的作法? : 3. 承上,因為同一個資料檔可能被重複開啟,想請問以下何種做法最有效率最省資源: : 1) iframe 載入後就保留,如果日後用到同一個資料檔, : 就直接讀取對應 iframe 的內容。 : 2) iframe 載入後,把內容存到主程式下的某個變數中,並關閉 iframe, :    如果日後用到同一個資料檔,就直接讀取對應的變數。 : 3) iframe 載入且讀完後就關閉,如果日後用到同一個資料檔,就重新載入一次。 : 4) 有比以上三者更好的方法? 我想就只需要一個 division,使用者開啟一次則讀取一次就好。 實在不需要儲存到某個變數,或是製造多個 division / iframe 存放。 我覺得你好像把所謂的「日後」想得太遠了,事實上不管如何, 使用者一關掉瀏覽器,你做的這些「快取」通通都會消失歸零, 你可以想想看,要使用者留著一個瀏覽視窗不要關閉,可以維持多久呢? 而為了做這個 cache,所造成的網頁結構複雜度、使用者記憶體耗用量、 使用者操作的順暢程度、使用感受等等,再加上撰寫相關機制以及日後 維護所花費的成本,我個人是覺得這麼做是弊大於利。 : 4. 在下想製作類似 phpBB 的 BBCode 或維基語法的自訂標籤,再用程式分析呈現, : 以供定義和規範化電子書的格式, : 並且可依實際需要配合樣式表做出多種變化、多種分析方式。 要做到最大的變化性,我想 HTML 會比什麼 BBCode 或是維基語法還要優秀很多。 : 目前最大障礙是,HTML 標籤只容許巢狀,而不容許交叉。 : 假設在下的自訂標籤語法如下: : [h1]標題[/h1] : 正文正文正文[note]註解註解[/note]正文正文正文...... : 這段文字會被程式轉換為: : <h1>標題</h1><br/><br/>正文正文正文<span class="note">註解註解</span> : 正文正文正文...... : (中間沒有換行,是為了BBS顯示才換行的) : 但如果有人寫成: : [h1]標[note]題[/h1] : 正文正文正文註解註解[/note]正文正文正文...... : 轉換後就會得到錯誤的結果...... : 在下希望程式能自動偵測這類的問題,並且自動修正為巢狀標籤: : <h1>標<span class="note">題</span></h1><br/><br/><span class="note"> : 正文正文正文註解註解</span>正文正文正文...... : 目前就卡在不知如何自動偵測標籤的不當嵌套, : 以及偵測出來後自動複製必要的標籤,請求各位大大協助。 關於這點,恕我不同意你的觀點。 我想先請教的是,你要根據什麼來認定這個不當嵌套的內容,是要依照你 所定的規則來做修正?使用者真正想表達的效果,一定是你設想的這樣嗎? 其實瀏覽器也有自己的容錯機制,而且肯定比您自己撰寫的要來得完善,因此, 我比較傾向把這個問題交給瀏覽器解決。 所以您要做的只是將 BBCode(或是您最終決定採用的其他格式)按照正常的規則 解析成 HTML,至於這個結果是不是可接受,就交給瀏覽器來解釋。 如果最後顯示的結果可以接受那就還好,否則就是該使用者犯了連瀏覽器都 無法接受的錯誤,這樣則直接要求該使用者改善。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.165.34.174
文章代碼(AID): #19Rn7zqF (Ajax)
討論串 (同標題文章)
文章代碼(AID): #19Rn7zqF (Ajax)