1. 程式人生 > >使用js callback的一個小技巧

使用js callback的一個小技巧

提醒:本文最後更新於 3569 天前,文中所描述的資訊可能已發生改變,請謹慎使用。

很多情況下,我們需要跨域讀取資料,或者是呼叫別人json格式的api,都要用到js callback這種機制。通常做法是頁面上定義一個A方法,再呼叫第三方的url並且把回撥函式名A傳過去。這樣做固然沒什麼問題,但有沒有更好的方法呢?

用過jQuery的同學肯定都知道,jQuery有一個getJSON的方法,只需要兩個引數(callback地址和匿名函式)就能正常工作。摘錄官方示例如下:

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?"
, function(data){ $.each(data.items, function(i,item){ $("<img/>").attr("src", item.media.m).appendTo("#images"); if ( i == 3 ) return false; }); });

很神奇吧!在這個例子中,我們並不用指定callback函式名,回撥也僅僅只是一個匿名函式而已,那麼它是怎麼完成函式呼叫的呢?去看下jQuery的原始碼,你會發現其實原理很簡單。如果懶得看太多程式碼,看看下面我寫的山寨版loadJSON,也能明白。

function loadJSON(url,callback){
    var cn = "jscallback"+(+new Date());
    var s = document.createElement("script");
    s.type = "text/javascript";
    s.src = url+cn;
    window[cn] = callback;
    document.getElementsByTagName("head")[0].appendChild(s);
};
loadJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback="
,function(o){ for(var i=0;i<3;i++){ var img = document.createElement("img"); img.src = o.items[i].media.m; document.body.appendChild(img); } });

演示地址

--EOF--

提醒:本文最後更新於 3569 天前,文中所描述的資訊可能已發生改變,請謹慎使用。

相關推薦

Vue.js一個技巧---利用v-for中的index值,來實現隔行變色

type 樣式 lin class idt title mes har oct   首先定義好樣式,利用v-for中的index值,然後綁定樣式來實現隔行變色效果。    以下為完整代碼,很簡單,但也是個技巧。 <!DOCTYPE html> &

使用js callback一個技巧

提醒:本文最後更新於 3569 天前,文中所描述的資訊可能已發生改變,請謹慎使用。 很多情況下,我們需要跨域讀取資料,或者是呼叫別人json格式的api,都要用到js callback這種機制。通常做法是頁面上定義一個A方法,再呼叫第三方的url並且把回撥函式名A傳過去。這樣做固然沒什麼問題,但有沒

關於時間差查詢的一個技巧

log sele 日期 where integer 時間差 時間 logs sql   求2個時間差,通常用datediff函數:DATEDIFF(datepart,startdate,enddate)     startdate 和 enddate 參數是合法的日期表達式

[Python隨筆]Python3輸出時使用print函式的一個技巧

在編寫程式碼的時候,總是煩著print()沒以前版本的好用了,例如: str="Hello World!" >>>print str 如果想輸出字串str,舊版中只要先輸入print,然後空格+變數名即可 在py3以後,則需要: >>>pr

關於刪除陣列中相同元素的一個技巧

如果說到刪除陣列中的相同元素,比如這裡定義一個數組var arr=[1,1,2,2,3,3,3],我想要刪除陣列中的2,那麼應該怎麼做呢。大家都會想到使用for迴圈就可以了,of course .  var arr=[1,1,1,2,2,2,3,3,3,3]; for (var i

FFT的一個技巧

蒟蒻的FFT學習筆記IN 對於一般的,我們將兩個多項式相乘,都是開兩個虛數陣列, A , B

mybatis的一個技巧與坑

今天在公司開發一個醫院系統時,遇到這樣兩個問題: 第一個問題: 我的一張表主鍵是自增長,主鍵欄位是病人id,還有一個欄位是門診號,門診號需要獲取主鍵的值,把值格式化成“00000000”這種八位數的格式。最開始想了一種方式:先把病人的其他資訊存入表中,然後再讀取id(此時通過比較,讀取最大的

Gson 處理空字串的一個技巧

在專案開發的過程中,經常會遇到空字串的 json,為了避免遇到空指標的問題,我們往往要進行字串的判空處理,不過如果是使用 Gson,則可以通過自定義 TypeAdapter 來處理空字串的問題 定義一個處理空字串的 TypeAdaper: public class

iOS本地化對於字串可變內容支援的一個技巧

我們知道iOS對於App本地化支援提供了較方便的介面,我們只需要在本地化支援檔案中設定好各種語言對應的字串就可以了,比如: //英文 “NameString" = "Name"; //中文 "NameString" = "名稱"; 呼叫時使用: let na

輪播圖中計算數字的一個技巧

最近公司專案中用到了輪播圖,由於公司職責分離,靜態頁面已經寫好了,我只需要負責使用vue新增互動效果即可。我得到的DOM結構如下: <ul> <li class="banner-prev"> <div cl

使用GridLayout時的一個技巧

利用SWT開發應用程式介面,採用GridLayout佈局管理器時,有時某個控制元件可能需要橫跨多列,出了在程式碼中進行設定外,利用SWT的Design頁,也能夠很方便的實現佈局。如下圖 如果“新增”按鈕需要佔據2列的,只需要拖動控制元件上的綠色控制點,既可以達到佈局的要求

想要學好Go語言的必須知道的一個技巧

由於我轉Go語言比較早,很多認識我的,轉Go或學習Go的同學遇到問題,經常會過來問我,然後,我發現。 除了學習Go語言可以看那些資料,這個問題以外,第二個經常被問的問題就是 “大佬,這個包下載 go get不下來怎麼辦啊。” “大哥,cli下怎麼設定代理啊

通過一個技巧可以讓flash和iframe的在ie下遮擋問題解決

最近在研究一個openlaszlo platform平臺的一個小bug.發現了一個在ie下很有意思的bug.一般iframe和flash混用經常都會碰到。ie上解決方式大都選擇wmode設定為transparent.但是swf在transparent的情況下,感應不到mou

複製網頁上的程式碼的一個技巧

       作為一個程式設計師的學習者,經常需要多學習別人的成果,再拿來執行一下,看到有結果出來,那一刻內心是高興的,彷彿看到了希望。        但有時候網頁上的程式碼複製到編譯器上編譯執行報了一堆錯誤,而看著程式碼好像完全沒問題啊!!這是怎麼回事呢。        

Unity十一個技巧

1.Unity宕機未儲存場景:當你在Unity中編輯場景,突然宕機時,可以在專案檔案目錄中找到Temp資料夾,雙擊資料夾,找到_Backupscenes資料夾,把字尾為.backup的檔案字尾改為.unity,然後拖進Unity的Project介面裡面,這樣就可

Mac下使用自帶終端SSH功能的一個技巧

在Mac OS的終端(terminal)中,可以使用命令ssh [email protected]的命令來遠端連線一臺伺服器,但是,如果要管理的伺服器太多,IP地址不能全部記住的時候怎麼辦?這時候我們可以為每一臺伺服器設定一個別名(alias),使用v

Android開發中padding使用一個技巧

   在安卓應用開發中,有時要用到狀態按鈕(可點選時與不可點選時的背景不相同),而且產品要求的按鈕大小是固定的。在不同的手機上按鈕的文字顯示可能有些異常(主要是在給按鈕做背景時很容易出現),此時我們怎

如何同時Ping 很多個IP地址,一個技巧節約N小時?

tps 名稱 地址 -o .com 每次 strong ping通 color ping命令是我們檢查網絡中最常用的命令,作為網絡人員,基本上每天都會用到,可以很好地幫助我們分析和判定網絡故障,如果有10設備,100臺設備,1000臺設備怎麽辦?一個個ping過去人都要瘋掉

一個技巧助您減少if語句的狀態判斷

> 作者:依樂祝 > 首發地址:https://www.cnblogs.com/yilezhu/p/14174990.html 在進行專案的開發的過程中, `if` 語句是少不了的,但我們始終要有一顆消滅 `if` / `else` 語句的心。為了消滅`if` / `else` 我們引入了 `短路器` 的概

一個倉鼠的js動畫

body col get man bsp widgets ams outer bow 直接在網頁打開就可以玩了; http://cdn.abowman.com/widgets/hamster/hamster.swf?up_bodyColor=f0e9cc&up_