1. 程式人生 > >Javascript的jsonp原理

Javascript的jsonp原理

Javascript的jsonp原理
  首先JSON是一種基於文字的資料交換方式,或者叫做資料描述格式 當一個網頁在請求JavaScript檔案時則不受是否跨域的影響,凡是擁有”src”這個屬性的標籤都擁有跨域的能力,比如<script>、<img>、<iframe> 所以我們這裡運用了script標籤的跨域能力,讓它用一個callback函式包裹著一段JSON格式的資料,當該資料返回到前端頁面的時候,我們再執行這個函式就可以把資料讀取出來
前端程式碼
jsonp.html
<html>
    <head>
        <meta charset="UTF-8">
        <title>Wsscat's jsonp</title>
    </head>
    <body>
        <button onclick="jsonpServer('jsonp.php')">JSONP</button>
    </body>
    <script>
        function jsonpServer(url) {
            var script = document.createElement("script");
            script.setAttribute("type", "text/javascript");
            script.setAttribute("src", url);
            document.body.appendChild(script);
        }   
        function JSON_CALLBACK(data) {
            console.log(data);
        }
    </script>
</html>

  

後端程式碼 jsonp.php
<?php
$data = '[{"id":"1","name":"wsscat"},{"id":"2","name":"asw"}]';
$data = "JSON_CALLBACK(" . $data . ")";
echo $data;
?>

  

jQuery的jsonp方法
 
type:請求方式 GET/POST url:請求地址 async:布林型別,預設為true 表示請求是否為非同步,如果為false表示為同步。
dataType:返回的資料型別 jsonp:傳遞給請求處理程式或頁面的,用以獲得jsonp回撥函式名的引數名(一般預設為:callback) jsonpCallback:自定義的jsonp回撥函式名稱,預設為jQuery自動生成的隨機函式名,也可以寫"?",jQuery會自動為你處理資料 success:呼叫成功執行的函式 error:異常處理函式
js程式碼
$.ajax({
            url:'index.php',
            type:'get',
            dataType:'jsonp',
            //jsonp:'JSON_CALLBACK',
            jsonpCallback:'JSON_CALLBACK',
            success:function(data){
                console.log(data)
            }
        })
php程式碼
<?php
    $data = '[{"id":"1","name":"wsscat"},{"id":"2","name":"asw"}]';
    $data = "JSON_CALLBACK(" . $data . ")";
    echo $data;
?>