Ajax是一種可以實現(xiàn)無需刷新整個網(wǎng)頁的技術(shù),讓用戶能夠與服務器進行交互,這種交互的過程在整個瀏覽器界面中不會導致任何不同。而為了保證這種無刷新的交互方式能夠?qū)崿F(xiàn),Ajax采用了回調(diào)函數(shù)作為主要的交互方式。
什么是回調(diào)函數(shù)呢?簡單來說,回調(diào)函數(shù)是在異步請求操作返回時被觸發(fā)的Javascript函數(shù)。就好像你想知道一個數(shù)的平方根,你會將這個數(shù)傳遞給一個執(zhí)行開平方操作的函數(shù),以獲取這個數(shù)的開平方值。而當函數(shù)執(zhí)行完畢,通過回調(diào)函數(shù)將結(jié)果返回給調(diào)用者。Ajax也是這樣的一個過程,由于用戶點擊了一個按鈕,你需要顯示對應的內(nèi)容,而由于數(shù)據(jù)量較大,因此需要異步請求從服務器來獲取數(shù)據(jù)。而用戶與服務器交互的過程,就需要借助回調(diào)函數(shù)來完成。
// Ajax 異步請求代碼 $.ajax({ url: 'ajax.php', data: {name: 'lucy'}, type: 'POST', success: function(result){ console.log(result); }, error: function(){ console.log('請求失敗'); } });
如上的實例代碼,我們可以看到,當Ajax請求成功時,會回調(diào)success函數(shù)。而在success函數(shù)中,由于我們在ajax.php文件中返回了內(nèi)容,所以可以看到輸出的內(nèi)容為ajax.php中返回的結(jié)果。而當請求失敗時,由于出現(xiàn)了錯誤,我們可以根據(jù)需要輸出相應的錯誤提示。因此可以看到,我們可以根據(jù)自己的需要,在success和error函數(shù)中分別進行處理。
除了可以在success和error函數(shù)中添加自己的處理代碼外,我們也可以自定義自己的回調(diào)函數(shù)來實現(xiàn)與服務器的交互。底下的代碼展示了一個自定義回調(diào)函數(shù)的實例。
function getServerData(url, data, callback){ $.ajax({ url: url, type: 'POST', data: data, success: callback, error: function(){ console.log('請求失敗'); } }); } function showServerData(result){ console.log(result); } // 調(diào)用自定義的回調(diào)函數(shù) getServerData('ajax.php', {name: 'lucy'}, showServerData);
如上的實例中,我們可以看到,在getServerData函數(shù)中,我們添加了自己的回調(diào)函數(shù)callback。而在調(diào)用getServerData函數(shù)時,我們將自己定義的showServerData函數(shù)作為回調(diào)函數(shù)傳遞進去。因此當請求成功后,將執(zhí)行showServerData函數(shù),將結(jié)果在console中展示出來。
除了以上介紹的回調(diào)函數(shù)實現(xiàn)方式外,我們還可以在Ajax請求后執(zhí)行一個回調(diào)函數(shù)來完成與服務器的交互。在代碼中,我們只需要在success函數(shù)中執(zhí)行回調(diào)函數(shù),并將獲取的數(shù)據(jù)作為參數(shù)傳遞給回調(diào)函數(shù)即可。如下所示的實例代碼執(zhí)行完一個異步請求后,調(diào)用回調(diào)函數(shù)handleData處理數(shù)據(jù)。
function getData(url, data, handleData){ $.ajax({ url: url, type: 'POST', data: data, success: function(data){ handleData(data); }, error: function(){ console.log('請求失敗'); } }); } function handleData(result){ console.log(result); } getData('ajax.php', {name: 'lucy'}, handleData);
總之,回調(diào)函數(shù)是Ajax技術(shù)中相當重要的一種實現(xiàn)方式。通過它,我們可以自定義自己的回調(diào)函數(shù),來處理從服務器返回的數(shù)據(jù),從而實現(xiàn)與服務器的數(shù)據(jù)交互。本文也給出了幾種實現(xiàn)回調(diào)函數(shù)的方式,并且在實例代碼中詳細地展示了如何使用回調(diào)函數(shù)來獲取數(shù)據(jù)并展示數(shù)據(jù)的方法。