1. 程式人生 > >jquery之回撥函式及jsonp

jquery之回撥函式及jsonp

回到前端,今天講一下jsonp的用法,不過在這之前先講一下跨域和回撥函式吧。
跨域:簡單來說,就說不同的域名之間的訪問,其中域名註冊涉及到傳輸協議、ip地址、埠等;具體可以參考:http://blog.csdn.net/lambert310/article/details/51683775

回撥函式:

回撥函式被認為是一種高階函式,一種被作為引數傳遞給另一個函式(在這稱作”otherFunction”)的高階函式,回撥函式會在otherFunction內被呼叫(或執行)。回撥函式的本質是一種模式(一種解決常見問題的模式),因此回撥函式也被稱為回撥模式。
回撥函式並不是立即執行,而是在包含函式的函式體內指定的位置“回撥”它(形如其名)。
匿名函式將延遲在click函式的函式體內被呼叫,即使沒有名稱,也可以被包含函式通過 arguments物件訪問。

正要講回撥函式時,突然碰到了物件和函式的概念,有點懵逼,
一直都似懂非懂的講著js一切為物件,但又一知半解;(以前只是用到了定義變數的東西);然後就先講原型prototype吧;
var fn = new Function(“arg1”, “arg2”, “return arg1 * arg2;”);
fn(2, 3); //6
http://www.w3school.com.cn/js/pro_js_functions_function_object.asp
w3c上有明確的規定;這是js原先就定義好的,無需深究;
看這個看懵逼了;沒見過,嘻嘻

參考:http://blog.csdn.net/luoweifu/article/details/41466537


http://www.jb51.net/article/54750.htm
本質上就是為了控制函式的執行時段,假如有A/B兩個函式,將B函式當做是引數傳遞到A引數中,當A滿足某一條件時,執行B引數,即為回撥;
只有js有這種功能,是因為js的function是一種物件,可以作為引數進行傳遞;
這時候可能就想了,為什麼非要把函式傳遞進去呢,為什麼不能在外面定義函式,然後在裡面直接呼叫呢?個人理解啊,這本身就是一種模式,如果是匿名函式的話又怎麼可以呼叫呢?而且假如這兩個東西一個在前臺一個在後臺呢,就需要回調函數了;第三點,可以通過改變不同的引數函式來決定主函式的行為(直接呼叫就不行了)

函數語言程式設計
函數語言程式設計最主要的技術之一就是回撥函式,等之後騰出手來研究一下函式式變成是什麼鬼?

<script type="text/javascript">
    var localHandler = function(data){
        alert('我是本地函式,可以被跨域的remote.js檔案呼叫,遠端js帶來的資料是:' + data.result);
    };
    </script>
    localHandler({"result":"我是遠端js帶來的資料"});
一直沒理解localHandler({"result":"我是遠端js帶來的資料"});

突然想通了,先在本地宣告函式;然後,遠端js檔案中,
上面的localHandler();其實就是呼叫函式,裡面的是它的引數,通過傳引數的方法傳遞過來,嘻嘻,感覺自己真笨啊以前,這麼簡單都理解不了;
個人理解:jsonp其實就是在本地宣告一個函式,然後在伺服器端生成一個js檔案,裡面寫入這個函式,將資料塞到函式的引數裡;最後通過前臺的動態拼接
script以及它的src屬性將伺服器的js檔案載入過來;
而jquery封裝的jsonp中並沒有看到函式的宣告,是因為它自動幫你生成回撥函式並把資料取出來供success屬性方法來呼叫;
具體參考:http://kb.cnblogs.com/page/139725/