跨域,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>  

 

posted @ 2017-06-30 17:14  楠...楠  阅读(3502)  评论(1编辑  收藏  举报