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