JSONP

JSONP

Jsonp(JSON with Padding) 是 json 的一種"使用模式",可以讓網(wǎng)頁從別的域名(網(wǎng)站)那獲取資料,即跨域讀取數(shù)據(jù)。
為什么我們從不同的域(網(wǎng)站)訪問數(shù)據(jù)需要一個(gè)特殊的技術(shù)(JSONP )呢?這是因?yàn)橥床呗浴?br> 同源策略,它是由Netscape提出的一個(gè)著名的安全策略,現(xiàn)在所有支持JavaScript 的瀏覽器都會(huì)使用這個(gè)策略。

  • 利用 html 的 <script> 元素的這個(gè)開放策略,網(wǎng)頁可以得到從其他來源動(dòng)態(tài)產(chǎn)生的 JSON 資料,而這種使用模式就是所謂的 JSONP。

1. 服務(wù)端JSONP格式數(shù)據(jù)

如客戶想訪問 : /try/ajax/jsonp.php?jsonp=callbackFunction。
假設(shè)客戶期望返回JSON數(shù)據(jù):["customername1","customername2"]。
真正返回到客戶端的數(shù)據(jù)顯示為:callbackFunction(["customername1","customername2"])。
服務(wù)端文件jsonp.php代碼為:

$callbackname = $_GET['jsoncallbackname']; //獲取回調(diào)函數(shù)名 callbackname = 
$arr = array(                              // json數(shù)據(jù) $arr = 
  'name' => "srark",
  "age" => 18,
  "msg" => "現(xiàn)在我們學(xué)習(xí)jsonp原理"
);
echo $callbackname."(".json_encode($arr).")" //輸出jsonp格式的數(shù)據(jù) echo $callbackname."(".json_encode($arr). ")";

客戶端頁面代碼

jsonp("api/jsonpcallback.php?jsoncallback=info",'info',function(data){ //調(diào)用封裝函數(shù)
  console.log(data.name +'----'+data.age);
})
function jsonp(url,callbackname,callback){          //封裝函數(shù)
var tagScript = document.createElement("script");   // 創(chuàng)建了一個(gè)script 標(biāo)簽
tagScript.src = url;                                // 給這個(gè)標(biāo)簽的src賦一個(gè)值
document.body.appendChild(tagScript);               // 把這個(gè)標(biāo)簽追加到body里面
window[callbackname] = callback;                    // 給window賦一個(gè)全局的函數(shù)
document.body.removeChild(tagScript);               // 用完就刪除這個(gè)script src標(biāo)簽
}

2 jquery中的ajax方法怎樣通過JSONP進(jìn)行遠(yuǎn)程調(diào)用

  • type:請(qǐng)求方式 GET/POST
  • url:請(qǐng)求地址
  • async:布爾類型,默認(rèn)為true 表示請(qǐng)求是否為異步,如果為false表示為同步。
  • dataType:返回的數(shù)據(jù)類型
  • jsonp:傳遞給請(qǐng)求處理程序或頁面的,用以獲得jsonp回調(diào)函數(shù)名的參數(shù)名(一般默認(rèn)為:callback)
  • jsonpCallback:自定義的jsonp回調(diào)函數(shù)名稱,默認(rèn)為jQuery自動(dòng)生成的隨機(jī)函數(shù)名,也可以寫"?",jQuery會(huì)自動(dòng)為你處理數(shù)據(jù)
  • success:調(diào)用成功執(zhí)行的函數(shù)
  • error:異常處理函數(shù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容