jsonp我简单的认为就是js的src引用了一个回调的函数。
php处理端
<?php
header('content-type:text/javascript;charset=utf-8');
$name=$_GET['callback'];
$data=array('name'=>'tom','age'=>'23','referer'=>$_SERVER['HTTP_REFERER']);
//第一种方式处理数据为纯json数据,客户端直接用data接受,直接塞入到需要的处理环境中,返回的是json数组,不会被浏览器解析
//ps: JSON_HEX_APOS 是phpjson_encode 参数,参考http://php.net/json_encode提供的把单引号换为 \u0027 了。
// $ret = json_encode($data, JSON_HEX_APOS);
// $name . '(\'' . $ret . '\');';
// 第二种为两个对象,对应的客户端可用data.name+data.age分别接收,会可以被解析
echo $name.'('.json_encode($data).')';
html端
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script>
function callb(data){
// alert(data.result);
}
</script>
<script src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script>
<!-- 要放在aehok函数下面 -->
<script src=http://b.com/jsonp/alert.js></script>
</head>
<body>
<h1>he</h1>
<script>
// $(function(){
// $.ajax({
// type:'get',
// async:false,
// url:'http://b.com/jsonp/data.php',
// dataType:'jsonp',
// jsonp:'callback',
// jsonpCallback:'hehe',
// success:function(data){
// // alert(data); 接受第一种处理
// alert(data.name+data.age);
// },
// error:function(){
// alert('err');
// },
// });
// })
// 比上一种更简单的jsonp写法
$.getJSON("http://b.com/jsonp/data.php?callbac=?", function(getUserInfo){
alert(getUserInfo.name+getUserInfo.age+getUserInfo.referer)})
</script>
</body>
</html>
为了让大家明白那个alert.js是干什么用的,我补上代码,其实很简单,可以帮助我们理解jsonp的原理
就两句:
alert('b.com');
callb({"result":"b.sdata"});
就是a.com src了这个js文件,然后js文件里包含a中的函数名字callb,这样就执行了