MozTW 討論區

各項 Mozilla 相關軟體與技術討論
現在的時間是 2025-06-22, 05:39

所有顯示的時間為 UTC + 8 小時





發表新文章 回覆主題  [ 5 篇文章 ] 
發表人 內容
文章發表於 : 2008-03-07, 11:31 
離線
頭像

註冊時間: 2006-10-27, 07:29
文章: 1068
如果在Ajax.Request裡使用onSuccess或onComplete的callback,可以正常parse出responseText的資料

但是因為我希望parse出來的JSON可以被其他物件使用
因此我嘗試把Ajax.Request的實體儲存起來
然後使用evalResponse的method
結果有時成功有時失敗(失敗居多)
responseText的值經常是空的

在callback的作用域是全域,所以沒辦法用this
有比較好的方法嗎?或是可以用object factory?

_________________
以下為簽名檔
半荒廢日誌....

Foolproof Project:
KomiX 漫畫瀏覽
Khopper 音樂轉檔

就算你百分之一百認定某人是渣滓中的渣滓,請仍然展示你的冷靜、體諒、尊重。


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2008-03-08, 12:54 
離線
[網站管理員]
頭像

註冊時間: 2004-09-27, 09:24
文章: 1685
比較最近的 Prototype 版本有在 String.prototype 上面加上 evalJSON 這個方法,所以可以這樣:
代碼:
  onSuccess: function(transport){
     var json = transport.responseText.evalJSON();
   }

至於要讓 JSON 可以被其他物件使用...這是比較程式結構的東西,it's not Prototype-specific per se。通常我的作法有兩種:
一、讓函式的參數接受 JSON 資料。這樣就可以呼叫方法的時候一併把 JSON 資料遞入。
二、擺在某個 namespace 裡面,然後該 namespace 的其他方法被呼叫的時候會去檢查有沒有 JSON 資料。

_________________
korp + korp 中文站(沒精神更新)


回頂端
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; zh-TW; rv:1.9b3) Gecko/2008020511 Firefox/3.0b3
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2008-03-08, 21:27 
離線
頭像

註冊時間: 2006-10-27, 07:29
文章: 1068
kourge 寫:
一、讓函式的參數接受 JSON 資料。這樣就可以呼叫方法的時候一併把 JSON 資料遞入。
二、擺在某個 namespace 裡面,然後該 namespace 的其他方法被呼叫的時候會去檢查有沒有 JSON 資料。


不是很懂....
意思是在onSuccess的callback裡讓它跟外部溝通嗎?

這是我寫出來的測試頁
可以看到onSuccess是在整個整體被回傳之後才觸發(應該是這樣吧?)

_________________
以下為簽名檔
半荒廢日誌....

Foolproof Project:
KomiX 漫畫瀏覽
Khopper 音樂轉檔

就算你百分之一百認定某人是渣滓中的渣滓,請仍然展示你的冷靜、體諒、尊重。


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2008-03-10, 05:49 
離線
[網站管理員]
頭像

註冊時間: 2004-09-27, 09:24
文章: 1685
意思是說 onSuccess always works,但 evalResponse sometimes fails 嗎?
那這樣的話...就依賴 onSuccess:
代碼:
         onSuccess: function( transport ) {
            this._data_ = transport.responseText.evalJSON( true );
         }.bind(this),

這樣 onSuccess 應該可以成功地存取 this。
還有...請千萬千萬不要動 Object.prototype,因為這樣會讓 iteration 整個亂掉...有 Object.inspect 可以用。
看來你寫 JS 的 style 很有 Python 味。

_________________
korp + korp 中文站(沒精神更新)


回頂端
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; zh-TW; rv:1.9b3) Gecko/2008020511 Firefox/3.0b3
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2008-03-10, 12:05 
離線
頭像

註冊時間: 2006-10-27, 07:29
文章: 1068
kourge 寫:
意思是說 onSuccess always works,但 evalResponse sometimes fails 嗎?
那這樣的話...就依賴 onSuccess:
代碼:
         onSuccess: function( transport ) {
            this._data_ = transport.responseText.evalJSON( true );
         }.bind(this),

這樣 onSuccess 應該可以成功地存取 this。


啊,都忘了有bind可以用
不過這次修過之後發現非要做alert的動作才可以讓this._data_抓到物件
個人推測原因是Ajax.Request開了另一條thread
在底下用到this._data_時onSuccess尚未觸發
如果不alert拖時間的話,底下物件存取高達八成會失敗
所以我很乾脆地把底下的動作都放到onSuccess裡了= =

但是這次變成class method定義時this._map_尚未有定義
不知道有沒有同步溝通的機制

kourge 寫:
還有...請千萬千萬不要動 Object.prototype,因為這樣會讓 iteration 整個亂掉...有 Object.inspect 可以用。


我就是發現它會造成整個Prototype發瘋才註解掉的(汗)
當初好像是因為想自訂輸出格式才會弄個__str__

kourge 寫:
看來你寫 JS 的 style 很有 Python 味。


被發現了XD
我朋友也跟我提過我寫的pseudocode長得和Python很像
我自己是不知不覺就會寫成這樣:P

_________________
以下為簽名檔
半荒廢日誌....

Foolproof Project:
KomiX 漫畫瀏覽
Khopper 音樂轉檔

就算你百分之一百認定某人是渣滓中的渣滓,請仍然展示你的冷靜、體諒、尊重。


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9b3) Gecko/2008020514 Firefox/3.0b3
 個人資料  
引用回覆  
顯示文章 :  排序  
發表新文章 回覆主題  [ 5 篇文章 ] 

所有顯示的時間為 UTC + 8 小時


誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 9 位訪客


不能 在這個版面發表主題
不能 在這個版面回覆主題
不能 在這個版面編輯您的文章
不能 在這個版面刪除您的文章
不能 在這個版面上傳附加檔案

搜尋:
前往 :  
Powered by phpBB® Forum Software © phpBB Group
正體中文語系由 竹貓星球 維護製作
© moztw.org, Mozilla Foundation
MozTW,Mozilla 台灣社群