好久都沒有寫隨筆了,最近大家都忙着考試要放假了,我也要忙一忙嘍.....不過再忙我還是來啦
簡單的說,json是一種輕量級的數據交換格式。平時我們使用ajax等使用的一種數據形式,那么今天就說說jsonp是個什么鬼。首先接觸的時候也是一臉懵逼,都不清楚這是什么東西,上網搜啊查啊,最后才弄明白了。
我們平時在寫項目的時候前端后端交互數據用的是json,但是如果你想跨域進行數據訪問,比如別的網站想看到你的數據或者你想看到別人的數據,不能用json格式進行傳送數據,有才的人啊就發現還有jsonp。老實說,jsonp就是滿足你跨域讀取數據的一種方法,下面就直接看代碼吧。
public function actionIndex(){ header('Content-type: application/json'); //獲取回調函數名 $jsoncallback = htmlspecialchars($_REQUEST ['jsoncallback']);//把預定義的字符轉換為 HTML 實體。
$resourceid = $_GET["resource_id"]; $resourceid = base64_decode($resourceid); $resourceid = SafetyHelper::KillDangerCode($resourceid); if(empty($resourceid) || is_numeric($resourceid)==false){ $json_data= json_encode(array("code"=>300,"msg"=>"素材ID錯誤","data"=>array())); echo $jsoncallback . "(" . $json_data . ")"; die(); } $resource = Resource::model()->find("id=".$resourceid); if(!empty($resource)){ $arr["code"]=200; $arr["msg"]="獲取成功"; $arr["data"]=array("title"=>$resource->title,"url"=>$resource->filepath,"hits"=>$resource->hits); }else{ $arr["code"]=404; $arr["msg"]="資源不存在"; $arr["data"]=""; } $json_data=json_encode($arr); //輸出jsonp格式的數據 echo $jsoncallback . "(" . $json_data . ")"; }
可以看的出來,比平時我們用json的時候多了兩行代碼,就是要用這個回調函數來實現輸出的格式變為jsonp。這是在PHP頁面的代碼,另外需要在HTML頁面寫一個js來調用得到jsonp。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>獲取jsonp對象</title> <script src="jquery.js"></script> </head> <body> <input type="text" id="val" ><input type="button" id="dian" value="點擊"> <script> var url='jsonp.php'; $("#dian").click(function(){ var aa=$("#val").val(); var data={jsoncallback:aa}; $.getJSON(url,data,function(msg){ alert(msg); }) }) </script> </body> </html>