JSONP跨域讀取資料
阿新 • • 發佈:2018-12-22
json是一種資料傳輸格式,而jsonp是一種資料獲取的方式,沒有什麼相關性。jsonp是一種輕量級的資料傳輸方式,
為什麼要使用jsonp呢?
為什麼我們從不同的域(網站)訪問資料需要一個特殊的技術(JSONP )呢?這是因為同源策略。
同源策略,它是由Netscape提出的一個著名的安全策略,現在所有支援JavaScript 的瀏覽器都會使用這個策略。
什麼是同源策略?
同源策略是web安全策略中的一種,非常重要。同源策略明確規定:不同域的客戶端在沒有明確授權的情況下,不能讀寫對方的資源。
簡單說來就是web瀏覽器允許第一個頁面的指令碼訪問訪問第二個頁面的資料,但是也只有在兩個頁面有相同的源的時候,如果不同源則需要授權。源:
使用:這裡小編建立了一個簡單的demo,繼續往下看看吧,幫助你學到知識呦:
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>jsonp跨域訪問</title> <script src="../month6/layui/jquery-3.2.0.min.js"></script> </head> <body> <input type="button" value="獲取" id="sigin"> <span id="get_value">000</span> </body> </html> <script> $('#sigin').on('click',function(){ //get發出請求 // $.getJSON("http://192.168.145.133/index.php?jsoncallback=?",function(data){// $('#get_value').html(data); // }); //ajax發出請求 $.ajax({ url:"http://192.168.145.133/index.php", dataType:'jsonp', data:'1', jsonp:'jsoncallback', success:function(data){ console.log(data); $('#get_value').html(data); } }) }) </script>
ps:主要流程就是當點選“獲取”之後,向另一個系統的頁面發出請求,?jsoncallback是請求之後產生的回撥。
demo中有get發出的請求 ajax請求,下面我們去請求的index.php頁面
index.php:
php
header('Content-type: application/json');//獲取回撥函式名
$jsoncallback = htmlspecialchars($_REQUEST['jsoncallback']);//json資料($_REQUEST['回撥函式的名稱'])
$json_data = '["customername1","customername2"]';//輸出jsonp格式的數具
echo$jsoncallback . "(" . $json_data . ")";//這裡是你回撥的jsonp資料(語法就是這樣呦)
那也許我們會疑問,為什麼要用$_REQUEST接回調的名字呢?
$_GET變數接受所有以get方式傳送的請求,及瀏覽器位址列中的?之後的內容
$_POST變數接受所有以post方式傳送的請求,例如,一個form以method=post提交,提交後php會處理post過來的全部變數
而$_REQUEST支援兩種方式傳送過來的請求,即post和get它都可以接受,顯示不顯示要看傳遞方法,get會顯示在url中(有字元數限制),post不會在url中顯示,可以傳遞任意多的資料(只要伺服器支援);
ps: http://www.runoob.com/json/json-jsonp.html (這裡有joinp的詳細使用)!
有什麼不對的地方,還請各位php大神指教呦!