首页 > Web开发 > 详细

jsonp总结

时间:2015-05-22 00:02:38      阅读:348      评论:0      收藏:0      [点我收藏+]

由于“同源策略”的限制,ajax不能做跨域请求,jsonp是当下解决跨域请求最流行的方案,来个例子(index.html):

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Document</title>
    <script src="js/jquery.js"></script>
</head>
<body>
<input type="button" value="submit" id="submit">
<div id="txt"></div>
<script>
//监听对象
// document.getElementById(‘submit‘).onclick = function(){
  
// }
//简单的jsonpCallback封装
function jsonpCallback(data){//回调函数
  console.log(data);
}
var jsonp = document.createElement("script");//动态添加脚本
jsonp.type = "text/javascript";
jsonp.src="json.php?callback=jsonpCallback";
document.getElementsByTagName("head")[0].appendChild(jsonp);
</script>
</body>
</html>

json.php页面:

<?php
$info = array("name"=>"复读机2","age"=>223);
$infoencode = json_encode($info);
$callback = $_GET["callback"];
echo $callback."(".$infoencode.")";//返回带有json格式数据的字符串
?>

说明一下:

发出请求的页面的执行过程:

  动态添加script标签,当添加完成之后,立即向json.php页面做出请求,这个请求是get请求,并携带callback=jsonpCallback查询字符串。

被请求的页面的执行过程:

  1将关联数组通过json_encode函数转化为json数据{"name":"复读机","age":23}并赋值给$infoencode变量

  2通过$_GET函数获取callback的值jsonpCallback

  3返回jsonpCallback({"name":"\u590d\u8bfb\u673a2","age":223})(这个值是通过utf-8编码的)

发送请求页面的执行过程:

  收到一个执行函数,并且执行jsonpCallback函数,完成数据传输!

注意的地方是:1由于jsonp的原理,同域也可以接收到数据;2不同子域名之间也属于跨域,不能通过ajax直接请求

 

jsonp总结

原文:http://www.cnblogs.com/wang-jiang/p/4521094.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!