JSONP是一種使用模式,人們常常把JSONP和JSON混淆,他們雖然有關(guān)系,但是描述的不是一個(gè)事物,JSONP是JSON with Padding的簡(jiǎn)稱。本篇會(huì)說(shuō)明JSONP是一個(gè)什么?怎么是去使用。
通俗講,JSONP 為解決跨域而誕生。是為了基于瀏覽器Web請(qǐng)求不通源之間的請(qǐng)求。
具體講,是解決不同源,被瀏覽器監(jiān)管Javascript的安全限制。
http://suancuo.cn調(diào)用http://suancuo.cn/json/是不會(huì)跨域的。http://suancuo.cn 調(diào)用http://www.itboy.net/json/是跨域的,因?yàn)椴煌蛎?http://suancuo.cn調(diào)用http://a.sojson.com/search1_baidu.com.html 是跨域的。因?yàn)槭遣煌?jí)域名。 http://suancuo.cn:8080調(diào)用http://suancuo.cn:8081 是跨域的。因?yàn)槭遣煌丝凇?http://suancuo.cn調(diào)用http://suancuo.cn 是跨域的。因?yàn)槭遣煌?qǐng)求協(xié)議,http和https。 188.188.188.20調(diào)用199.199.199.99 是跨域的。因?yàn)椴煌琁P。 localhost調(diào)用127.0.0.1 也是跨域的。其實(shí)他也是不同域名。 前端代碼,Javascript:
<script>
//jsonp回調(diào)方法,一定要寫在jsonp請(qǐng)求前面
function callback(txt){
alert(txt);
}
</script>
<script src ="/layui/demo-testJsonp.shtml" type="text/javascript" ></script>
后端代碼,Java:
/**
* jsonp 測(cè)試
* @return
*/
@RequestMapping(value="testJsonp",method=RequestMethod.GET)
@ResponseBody
public String testJsonp(){
return "callback('test jsonp');";
}
前端會(huì)alert彈出的內(nèi)容“test jsonp”。
前端代碼,Javascript:
<script>
//jsonp回調(diào)方法,一定要寫在jsonp請(qǐng)求前面
function testjson(txt){
alert(txt);
}
</script>
<script src ="/layui/demo-testJsonp.shtml?callback=testjson" type="text/javascript" ></script>
后端代碼,Java:
/**
* jsonp 測(cè)試
* @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() 為獲取當(dāng)前的IP,這個(gè)函數(shù)是我自己的。
$.getScript("https://open.onebox.so.com/dataApi?type=ip&src=onebox&tpl=0&num=1&query=ip&url=ip&ip="+nowIp()+"&callback=testjsonp");
}
</script>
這個(gè)接口您不要去嘗試使用,因?yàn)樗臄?shù)據(jù)來(lái)自百度而已。
PHP代碼:
<?php
$data = ".......";
$callback = $_GET['callback'];
echo $callback.'('.json_encode($data).')';
exit;
?>
前端代碼,Javascript:
<script>
$.ajax({
type : "post",
url : "ajax.php",
dataType : "jsonp",
jsonp: "callback",//傳遞給請(qǐng)求處理程序或頁(yè)面的,用以獲得jsonp回調(diào)函數(shù)名的參數(shù)名(默認(rèn)為:callback)
jsonpCallback:"success_jsonpCallback",//自定義的jsonp回調(diào)函數(shù)名稱,默認(rèn)為jQuery自動(dòng)生成的隨機(jī)函數(shù)名
success : function(json){
alert('success');
},
error:function(){
alert('fail');
}
});
</script>
綜合技術(shù)交流:點(diǎn)擊加入--> [SO JSON官方交流①群][收費(fèi)]
綜合技術(shù)交流:點(diǎn)擊加入--> [SO JSON官方交流②群][免費(fèi)]
要求:不能發(fā)廣告、暴力、政治、付費(fèi)教程,違者直接踢出。
備注:入群費(fèi)用5元,沒(méi)有QQ錢包,可以先支付寶 or 微信掃碼支付5元贊助后,我拉您進(jìn)去。QQ聯(lián)系我。
掃碼贊助:贊助二維碼。
技術(shù)交流QQ群:①群259217951,②群166848545
站長(zhǎng)郵箱:so@sojson.com
對(duì)頁(yè)面內(nèi)容有任何疑問(wèn)和建議,請(qǐng)聯(lián)系我們。
所有贊助/開(kāi)支都講公開(kāi)明細(xì),用于網(wǎng)站維護(hù):贊助名單查看
正在加載... ...