提及jsonp就不可避免提到一個問題,那就是跨域。
跨域是指不符合同源策略;
同源策略:
(1)協議相同;
(2)端口號相同;
(3)域名相同;
解決跨域一般有兩種方法;
(1)在后臺代碼設置
header("access-Control-Allow-Origin:*");
這樣是通知瀏覽器不要阻止跨域請求,但是很不安全;
(2)使用jsonp請求
jsonp的原理;
動態添加一個<script>標簽,而script標簽的src屬性是沒有跨域的限制的。這樣說來,這種跨域方式其實與Ajax xmlHttPRequest協議無關了。
Jsonp的執行過程如下:
①首先在客戶端自定義一個函數 (如:functiongetName(data){console.log(data)})
②然后動態創建一個script標簽,src指向其他域名下的api,當script標簽創建完成,就會根據api接口去請求數據,返回的數據格式類似getName({'name':'xiaoming'})。
③返回的數據格式,其實是一個方法調用,所以就會調用在第一步自定義的函數,同時傳入參數。
④每次jsonp請求,都需要動態創建一個script標簽,防止標簽變多,需要在script標簽onload完成后,刪除我們剛剛創建的script標簽。ps:1.jsonp與ajax沒有任何關系
2.jsonp需要后臺與前端進行配合才能完成。
json數據的應用;
JSON 是一種輕量級的數據交換格式。
JSON 獨立于語言和平臺,JSON 解析器和JSON 庫支持許多不同的編程語言。
JS 字面量對象 轉成 json 字符串
var
arr = [1,2,3, { a : 1 } ];
JSON.stringify( arr );
字符串解析成 JSON var
str =
'[1,2,3,{"a":1}]'
;
JSON.parse( str );
php面量對象 轉成 json 字符串$arr
=
array
(
'name'
=>
'hehe'
);
echo
json_encode(
$arr
);
新聞熱點
疑難解答