JSONP是一种使用模式,人们常常把JSONP和JSON混淆,他们虽然有关系,但是描述的不是一个事物,JSONP是JSON with Padding的简称。本篇会说明JSONP是一个什么?怎么是去使用。
通俗讲,JSONP 为解决跨域而诞生。是为了基于浏览器Web请求不通源之间的请求。
具体讲,是解决不同源,被浏览器监管Javascript的安全限制。
https://www,google365.cn调用https://www,google365.cn/json/是不会跨域的。https://www,google365.cn 调用http://www.bjs114.cn/domain/json/是跨域的,因为不同域名。 https://www,google365.cn调用http://a.google365.cn/search.html 是跨域的。因为是不同二级域名。 https://www,google365.cn:8080调用https://www,google365.cn:8081 是跨域的。因为是不同端口。 https://www,google365.cn调用http://www.google365.cn 是跨域的。因为是不同请求协议,http和https。 188.188.188.20调用199.199.199.99 是跨域的。因为不同IP。 localhost调用127.0.0.1 也是跨域的。其实他也是不同域名。 前端代码,Javascript:
<script>
//jsonp回调方法,一定要写在jsonp请求前面
function callback(txt){
alert(txt);
}
</script>
<script src ="/layui/demo-testJsonp.shtml" type="text/javascript" ></script>
后端代码,Java:
/**
* jsonp 测试
* @return
*/
@RequestMapping(value="testJsonp",method=RequestMethod.GET)
@ResponseBody
public String testJsonp(){
return "callback('test jsonp');";
}
前端会alert弹出的内容“test jsonp”。
前端代码,Javascript:
<script>
//jsonp回调方法,一定要写在jsonp请求前面
function testjson(txt){
alert(txt);
}
</script>
<script src ="/layui/demo-testJsonp.shtml?callback=testjson" type="text/javascript" ></script>
后端代码,Java:
/**
* jsonp 测试
* @return
*/
@RequestMapping(value="testJsonp",method=RequestMethod.GET)
@ResponseBody
public String testJsonp(String callback){
return callback +"('test jsonp');";
}
前端代码,Javascript:
<script>
var testjsonp = function(data){
for(var i in data){
alert( i +":" + data[i]);
};
}
var demoJSONP = function () {
//nowIp() 为获取当前的IP,这个函数是我自己的。
$.getScript("https://open.onebox.so.com/dataApi?type=ip&src=onebox&tpl=0&num=1&query=ip&url=ip&ip="+nowIp()+"&callback=testjsonp");
}
</script>
这个接口您不要去尝试使用,因为它的数据来自百度而已。
PHP代码:
<?php
$data = ".......";
$callback = $_GET['callback'];
echo $callback.'('.json_encode($data).')';
exit;
?>
前端代码,Javascript:
<script>
$.ajax({
type : "post",
url : "ajax.php",
dataType : "jsonp",
jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback)
jsonpCallback:"success_jsonpCallback",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名
success : function(json){
alert('success');
},
error:function(){
alert('fail');
}
});
</script>
版权所属:SOJSON(原创文章)
原文地址:https://www.sojson.com/json/json_jsonp.html
转载时必须以链接形式注明原始出处及本声明。