1. 程式人生 > >JSONP跨域讀取資料

JSONP跨域讀取資料

json是一種資料傳輸格式,而jsonp是一種資料獲取的方式,沒有什麼相關性。jsonp是一種輕量級的資料傳輸方式,

為什麼要使用jsonp呢?

為什麼我們從不同的域(網站)訪問資料需要一個特殊的技術(JSONP )呢?這是因為同源策略。

同源策略,它是由Netscape提出的一個著名的安全策略,現在所有支援JavaScript 的瀏覽器都會使用這個策略。

什麼是同源策略?

同源策略是web安全策略中的一種,非常重要。 
同源策略明確規定:不同域的客戶端在沒有明確授權的情況下,不能讀寫對方的資源。
簡單說來就是web瀏覽器允許第一個頁面的指令碼訪問訪問第二個頁面的資料,但是也只有在兩個頁面有相同的源的時候,如果不同源則需要授權。源:
URI(統一資源識別符號)、主機名、埠號組合而成的。這個策略可以阻止一個頁面上惡意指令碼通過頁面DOM物件獲得訪問另一個頁面的敏感資訊的許可權。
使用:這裡小編建立了一個簡單的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支援兩種方式傳送過來的請求,即
postget它都可以接受,顯示不顯示要看傳遞方法,get會顯示在url中(有字元數限制),post不會在url中顯示,可以傳遞任意多的資料(只要伺服器支援);
ps:   http://www.runoob.com/json/json-jsonp.html  (這裡有joinp的詳細使用)!
有什麼不對的地方,還請各位php大神指教呦!