原理
jsonp的本质是利用script标签的src属性进行跨域请求,只能用于get请求。
前端jquery实现
使用jquery的 .getJson .ajax方法如下:
1. <script type="text/javascript">
2. $.ajax({
3. url:"http://crossdomain.com/services.php",
4. dataType:'jsonp',
5. data:'',
6. jsonp:'callback',
7. success:function(result) {
8. for(var i in result) {
9. alert(i+":"+result[i]);//循环输出a:1,b:2,etc.
10. }
11. },
12. timeout:3000
13. });
14. </script>
必须指定参数:
dataType : 'jsonp'
jsonp : 'callback'
这里的jsonp参数可以随便改,但是后台需原样返回。
此时的success回调函数相当于原生js中script内部定义好的回调函数。
与一般的返回json字符串不同,jsonp返回的是一个函数调用,如果指定的callback=jsonpCallback,那么后台返回的是 'jsonpCallback(data)'
php后台可以写一个通用的方法处理jsonp返回:
1. function api_jsonp_encode($json)
2. {
3. if (!empty($_GET['callbak'])) {
4. return $_GET['callbak'] . '(' . $json . ')'; // jsonp
5. }
6. return $json; // json
7. }
网友评论