MozTW 討論區
https://forum.moztw.org/

[問題]Ajax::Request in prototype.js
https://forum.moztw.org/viewtopic.php?f=13&t=21852
1 頁 (共 1 頁)

發表人:  legnaleurc [ 2008-03-07, 11:31 ]
文章主題 :  [問題]Ajax::Request in prototype.js

如果在Ajax.Request裡使用onSuccess或onComplete的callback,可以正常parse出responseText的資料

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

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

發表人:  kourge [ 2008-03-08, 12:54 ]
文章主題 : 

比較最近的 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 資料。

發表人:  legnaleurc [ 2008-03-08, 21:27 ]
文章主題 : 

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


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

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

發表人:  kourge [ 2008-03-10, 05:49 ]
文章主題 : 

意思是說 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 味。

發表人:  legnaleurc [ 2008-03-10, 12:05 ]
文章主題 : 

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

1 頁 (共 1 頁) 所有顯示的時間為 UTC + 8 小時
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/