PHP JSONP是一種用于從服務器獲取數據的方法。這種方法可以跨越不同域名,為我們提供了非常便利的解決方案,比如可以異步加載一些遠程的資源,并使用這些資源更新我們的網頁。下面我們就來了解一下PHP JSONP。
在使用PHP JSONP的時候需要用到的一個概念是callback。callback是一個函數名,用于接收異步響應的數據。當我們向服務器發起請求時,callback參數會附加在URL的末尾。URL將傳遞到服務器端,服務器根據callback參數動態生成響應。最終響應數據將被作為字符串形式包裹在callback函數中,并作為響應返回到我們的網頁中。
function myCallback(jsonData){
console.log('This is my callback function');
console.log(jsonData);
}
var url = "http://example.com/service.php?callback=myCallback";
var script = document.createElement('script');
script.setAttribute('src', url);
document.getElementsByTagName('head')[0].appendChild(script);
在上面的代碼中,我們定義了一個叫做myCallback的函數。我們將這個函數名作為callback的值傳遞給服務器上的服務端腳本。服務端腳本將返回一個JSON格式的數據,并包裹在回調函數中。最終,回調函數將被調用,并接收JSON響應數據。
服務端PHP代碼如下:
$data = array('name' =>'PHP JSONP', 'type' =>'Web Service');
$json = json_encode($data);
$callback = $_GET['callback'];
echo $callback.'('. $json . ')';
在上面的PHP代碼中,我們首先創建了一個關聯數組$data,并將它轉換成了JSON格式的字符串。然后,我們從請求的URL中獲取callback參數值,并將JSON響應包裹在callback函數中。最終響應的數據會像這樣返回:
myCallback({"name":"PHP JSONP","type":"Web Service"})
這里有一些需要注意的事項。第一,我們使用jsonp格式來指定響應類型。這樣瀏覽器就會知道來糾正執行回調函數。第二,我們使用pre tag包裹代碼以保證顯示效果。第三,我們避免了取決于瀏覽器緩存的問題,即使用JSON反序列化來創建JavaScript對象。
最后,你除了城替代MyCallback函數以外,也可以替換其他函數名。這個例子的作用是幫助你理解在應用程序中使用JSONP。