建立一個新的 Object object,想搭配 jQuery 的 ajax callback 來使用時,當你需要做內容或function調用時會出現怪異的現象,和想像中的不同.主要原因是我組合了許多不同人寫的 js的不同功能 ,合併成一個大的組合,有點像我以前在做 xxx 首頁時,因為沒有像 Yahoo YUI 的編制做相關的事,於是我從網路許多不同的網站,各取所需組合成新的首頁.不過,現在的首頁雖有我之前做的影子,但事實上裡面的結構已經和我做的有些不同了.
例如:
- function xxxx(){}
-
- $.ajax({
- url: get_url,
- type: 'GET',
- dataType: 'xml',
- timeout: otimeout,
- error: this.showerr , //work, 因為這裡的 this 還是引用的 xxxxx, OO 的 this.
- success:this.callback // work,如上.
- });
當 ajax 回傳 this.callback 後,
如果你使用了 jQuery 來擷取資料,要搭配原來的 xxxx ,調用裡面的 function 時,一般會下
this.ooooooo(aaaaaa(i)) 之類的作法,但是,因為 jQuery 裡的 function 裡的 this 是自己的,取不到上一層的 this. 該怎麼做?
- xxxx.prototype.callback = function(xml) {
- $(xml).find('item').each(function(){
- var item = $(this);
- var title = $("title",item).text();
- var desc = $("description",item).text();
- var link = $("link",item).text();
-
- 這裡想要調用 this.aaaaa(item) 時,就會出問題.因為 jQuery 已經認為這個 this 為這個 function裡的 this. 而 this.aaaa 想要調用的是上一層 xxxx 裡的 function,就會無法正常 work.
-
- )};
-
- }
正在想怎麼解決?
因為搭配 jQuery 可以後方便的使用 ajax 來處理相關的資訊.(jQuery 的 ajax 很方便,可以有 overtime 和 success, complete 的相關功能,這在使用 ajax 的功能相當重要,主要是用來告知使用者訊息)
但遇上了Object object this. vs jQuery this. 該怎麼做?還要再想想.
如果只是單純的把資料倒出來或是配合 function 都可以很容易做到.沒有 this. 的問題.
我的狀況剛好比較特殊,大概只能從幾方便下手:
1.改變寫法,利用 function 來解決.
2.想辦法弄懂 Object object this. + jQuery this. 不同層次的調用.
3.不知有沒有範例可以看?但我一直找不到.
繼續努力搞懂,還有解決它.
苦思多日,終於先初步的最後的解決方案是(也許還有更好的方法,但先解決眼前的問題再說):
需要引用的參數多設一個相對的公有變數,如此在 function裡要引用時,就可以很簡單的呼叫公用的變數.
例如:
this.icon = img;
多設一個
o_icon = this.icon; 供 jQuery Ajax callback 回來時引用.
再來是要改寫會出現 this. 相關用法,只要遇到 this. 全都要改寫如上頭的寫法,並且修改 prototype 的寫法,或改寫成 function ,藉以互相搭配,範例改天再放.
解決這個問題之後,以後要處理相關的問題就更容易了.