一般來說我們使用jquery的ajax來跨域請求API數據的時候每次請求,就只能請求一組數據,而且當我們再次點擊發送ajax請求的時候,新請求的數據會覆蓋掉原來的數據,那么如何每次在請求的數據的時候,保留我們上次請求的數據呢?
做法很簡單,聲明全局變量,把每次請求的數據,緩存起來,這樣有兩個好處,一個是減少http請求,降低交互事件,另一個是方便我們查詢歷史數據。
下面是我們一般使用jquery發送ajax請求的代碼片段:
1 function testData(arg){ 2 $.ajax({ 3 type:'get',//請求方式 4 url:'',//api地址 5 dataType:'jsonp',//使用jsonp來開始跨域 6 jsonpCallback:'Callback',//跨域需要的回調函數 7 success:function(data){ 8 // 請求數據成功后的調用的函數 9 // data就是我們要獲取的參數 10 } 11 }) 12 }
其實通過上面代碼我們很容就能看出,我們每次調用方法,發送ajax請求,都會獲得一組全新的數據,因為參數data是每發送一次的請求,就會攜帶一組新的數據給我們!這就是問題所在:
那么我們對下面的代碼進行改造:
1 var items = {}; 2 var results = []; 3 function testData(arg){ 4 $.ajax({ 5 type:'get',//請求方式 6 url:'',//api地址 7 dataType:'jsonp',//使用jsonp來開始跨域 8 jsonpCallback:'Callback',//跨域需要的回調函數 9 success:function(data){ 10 // 請求數據成功后的調用的函數 11 // data就是我們要獲取的參數 12 // 一般API的結構是對象里面包含對象數組 13 // 那么首先我們先把我們想要的數據,以對象的形式的添加到數組中 14 results.push({ 15 foo:data.foo, 16 bar:data.bar, 17 name:data.name 18 }) 19 // 其次再把這個數組當成對象的屬性,添加到一個空對對象中,這樣就實現了數據的緩存 20 items = { 21 results:results 22 } 23 } 24 }) 25 }