一個小例子學習JSONP的基本使用

在JavaScript中Ajax是無法跨域的,當協議或者域名或者端口任一不同時,都會出現跨域,跨域處理的其中一種方案就是JSONP。今天就利用百度的一個JSONP接口來實現一個仿百度首頁。

怎么去使用jsonp?

在JS中,src屬性是沒有同源策略限制的,所以通過src屬性來實現跨域請求,jsonp的原理就是在src接口調用一個函數,在代碼里定義這個函數,我們來看一下百度接口
https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=百度&cb=getData
wb=后面跟上要查找的內容,cb=后面寫函數名字,上面的地址輸入到地址欄結果如下:

getData({q:"百度",p:false,s:["百度云盤","百度翻譯","百度地圖","百度殺毒","百度衛士","百度學術","百度文庫","百度音樂","百度外賣","百度指數"]});
//可以看到getData是我們定義的函數名字,參數是一個對象,也就是說這個接口是一個函數的調用

那么我們可以在代碼里先定義這個函數的內容,再通過script的src去引入這個地址,就等于調用了一個函數,參數就是我們要處理的數據;
那么現在來實現一下:

//html 代碼 樣式自己定義
<div id="show"></div>
<div id="div">
    <input type="text" id="search" >
    <a href="#" id="baidu">百度一下</a>
</div>
Paste_Image.png
//js代碼
window.onload = function(){
            var search = document.getElementById('search');
            //獲取搜索框
            //百度一下按鈕
            var baidu = document.getElementById('baidu');           
            baidu.onclick = function () {
                // location.+search.value;
                // 新窗口打開
                window.open("https://www.baidu.com/s?wd="+search.value);
            }
            search.onkeyup = function(){
                //每次鍵盤抬起獲取輸入框內容,抬起的時候需要調用那個接口執行getData函數
                //所以每次去動態生成script標簽,src定義為接口地址,這樣就等于執行了一個名字叫getData的函數
                var val = search.value;
                var script = document.createElement('script');
                script.src = "https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=" + val + "&cb=getData";//引入js地址,cb=此處函數名字可以隨便取,與自己定義的函數名相同即可
                script.id = 'import';
                document.body.appendChild(script);//把script加入到頁面中
            }
        }
//然后定義getData函數怎么去實現對數據處理
function getData(data){
    var showDiv = document.getElementById('show');//顯示搜索詞條div
    //下面這個script是需要對添加的script標簽進行處理
    var script = document.getElementById('import');//導入的js
    script.parentNode.removeChild(script);//移除導入的js
    var ul = document.createElement('ul');//創建一個ul
    showDiv.innerHTML = "";//每次調用函數先把顯示內容清空
    for(var i=0;i<data.s.length;i++){//循環導入src接口里面的詞條
        var li = document.createElement('li');//動態創建li
        li.innerHTML = data.s[i];//li的內容是src里的s
        ul.appendChild(li);
    }
    show.appendChild(ul);
    //給每個詞條li加點擊事件
    var aLi = document.getElementsByTagName('li');
    for(var i=0;i<aLi.length;i++){
      aLi[i].onclick = function () {
          location.+this.innerHTML;
          // 新窗口打開鏈接
          // window.open("https://www.baidu.com/s?wd="+this.innerHTML);
         }
    }
}```
至此,就完成了一個基礎的JSONP調用
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容