jsonp跨域傳值
很簡(jiǎn)單,(歷史遺跡袄韧铡)來(lái)達(dá)到與第三方通訊的目的据过。當(dāng)需要通訊時(shí),本站腳本創(chuàng)建一個(gè)元素妒挎,地址指向第三方的API網(wǎng)址绳锅,形如:
并提供一個(gè)回調(diào)函數(shù)來(lái)接收數(shù)據(jù)(函數(shù)名可約定,或通過(guò)地址參數(shù)傳遞)酝掩。
第三方產(chǎn)生的響應(yīng)為json數(shù)據(jù)的包裝(故稱之為jsonp鳞芙,即json padding),形如:callback({"name":"hax","gender":"Male"})
這樣瀏覽器會(huì)調(diào)用callback函數(shù)期虾,并傳遞解析后json對(duì)象作為參數(shù)原朝。本站腳本可在callback函數(shù)里處理所傳入的數(shù)據(jù)。
代碼實(shí)現(xiàn):
下面文件內(nèi)容在:www.test1.com域名下镶苞,請(qǐng)求www.test2.com下的test2.php文件內(nèi)容
<metacontent="text/html; charset=utf-8"http-equiv="Content-Type"/> <scripttype="text/javascript">
functionjsonpCallback(result) {
alert(result.name);
}
script>
<scripttype="text/javascript"src="www.test2.com/test2.php?callback=jsonpCallback">script>
以上代碼需要注意:JavaScript的鏈接喳坠,必須在function的下面
下面文件內(nèi)容在www.test2.com下的test2.php里:
header("content-type:text/html;charset=utf-8");
@$arr=array(
name=>"zhangsan",
age=>23,
sex=>'男'
);
echo$_GET['callback']."(".json_encode($arr).")";
?>
實(shí)現(xiàn)方式2:利用$.getJSON實(shí)現(xiàn)
下面文件內(nèi)容在:www.test1.com域名下,請(qǐng)求www.test2.com下的test2.php文件內(nèi)容
<scripttype="text/javascript"src="引入jquery路徑">script> <scripttype="text/javascript">$.getJSON("http://www.test2.com/test2.php?callback=?",function(result) {
alert(result.name)//就可以得到name的值
}
});
script>
下面文件內(nèi)容在www.test2.com下的test2.php里:
header("content-type:text/html;charset=utf-8");
@$arr=array(name=>"zhangsan",age=>23,sex=>'男'
);
echo$_GET['callback']."(".json_encode($arr).")";
?>
實(shí)現(xiàn)方式3:利用$.ajax實(shí)現(xiàn)
下面文件內(nèi)容在:www.test1.com域名下茂蚓,請(qǐng)求www.test2.com下的test2.php文件內(nèi)容
<script>
$.ajax({
url:'http://www.wp.com/getData.php'//跨域到http://www.wp.com壕鹉,另,http://test.com也
算跨域
type:'GET',//jsonp類型下只能使用GET,不能用POST,這里不寫(xiě)
默認(rèn)為GET
dataType:'jsonp',//指定為jsonp類型
data:{"name":"Zjmainstay"},//數(shù)據(jù)參數(shù)
jsonp:'callback',//服務(wù)器端獲取回調(diào)函數(shù)名的key聋涨,對(duì)應(yīng)后臺(tái)有$_GET['callback']='‘getName';ca
llback是默值
jsonpCallback:'getName',
//回調(diào)函數(shù)名
success:function(result){
//成功執(zhí)行處理晾浴,對(duì)應(yīng)后臺(tái)返回的getName(data)方
}
alert(result.name);//可以得到zhangsan
法。
});
</
script
>
下面文件內(nèi)容在www.test2.com下的test2.php里:
header("content-type:text/html;charset=utf-8");
@$arr=array(name=>"zhangsan",age=>23,sex=>'男'
);
echo$_GET['callback']."(".json_encode($arr).")";
?>