jQuery是一個(gè)流行的JavaScript庫,可以幫助我們輕松處理 DOM 操作、動(dòng)畫、事件處理等問題。JSONP是一種跨域 HTTP 請(qǐng)求技術(shù),它可以允許我們通過跨域獲取客戶端瀏覽器中需要的資源。
使用 jQuery 進(jìn)行 JSONP 數(shù)據(jù)請(qǐng)求非常簡單,只需通過$.getJSON
方法發(fā)起請(qǐng)求即可。這個(gè)方法有兩個(gè)參數(shù):一個(gè)是 URL 地址,另一個(gè)是一個(gè)成功的回調(diào)函數(shù)。
$(document).ready(function(){
$.getJSON("http://example.com/data?callback=?", function(data) {
console.log(data);
});
});
其中,http://example.com/data
是我們請(qǐng)求的 URL 地址,最后的?callback=?
是告訴服務(wù)器我們需要進(jìn)行 JSONP 請(qǐng)求,并且這里的?
會(huì)被 jQuery 自動(dòng)替換成隨機(jī)生成的函數(shù)名。
在服務(wù)器端,需要將返回的數(shù)據(jù)包裝成 JSONP 的格式返回給客戶端。例如,對(duì)于 PHP 程序,可以這么做:
<?php
$data = array('name' => 'John', 'age' => 25);
$jsonp = isset($_GET['callback']) ? $_GET['callback'] : 'callback';
header("Content-Type: application/json");
echo $jsonp . (json_encode($data) . );
?>
這里將數(shù)據(jù)包裝成 JSON 格式,然后將客戶端請(qǐng)求的回調(diào)函數(shù)名加到數(shù)據(jù)開頭返回給客戶端。例如,如果回調(diào)函數(shù)名為mycallback
,那么服務(wù)器返回的就是mycallback({"name": "John", "age": 25});
。
JSONP 最大的缺點(diǎn)就是安全性差,因?yàn)榭梢栽诳蛻舳硕x任何回調(diào)函數(shù)名,所以容易遭到惡意攻擊。因此,當(dāng)我們使用 JSONP 時(shí),需要確保我們向服務(wù)器請(qǐng)求的資源是可信的。