跨域,json與jsonp格式


         好久都沒有寫隨筆了,最近大家都忙着考試要放假了,我也要忙一忙嘍.....不過再忙我還是來啦  

        簡單的說,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>  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM