1. 程式人生 > >JSONP實現Ajax跨域

JSONP實現Ajax跨域

images cnblogs log 方式 clas 一個 nbsp submit har

同源策略,它是由Netscape提出的一個著名的安全策略。 現在所有支持JavaScript 的瀏覽器都會使用這個策略。 所謂同源是指,域名,協議,端口相同。 當一個瀏覽器的兩個tab頁中分別打開來 百度和谷歌的頁面 當瀏覽器的百度tab頁執行一個腳本的時候會檢查這個腳本是屬於哪個頁面的, 即檢查是否同源,只有和百度同源的腳本才會被執行。 如果非同源,那麽在請求數據時,瀏覽器會在控制臺中報一個異常,提示拒絕訪問。 而標簽帶有src的可以突破同源策略。例如<img> <sccript> <Iframe>標簽。 JSONP兩大機制是:
  • 1:瀏覽器有同源策略,采用script即可將數據發送過去,但拿回數據不正確
  • 2:dataType=‘jsonp‘,是的拿回數據正確

例子(1):

<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="content"></div>
    <input type="button" value="發送1" onclick="submitJsonp1();">
    <input type="button" value="發送2" onclick="
submitJsonp2();"> <input type="button" value="發送3" onclick="submitJsonp3();"> <script src="/static/jquery-3.2.0.js"></script> <script> function submitJsonp1(){ $.ajax({ url:/ajax3.html, type:GET, data:{nid:
2}, success:function (arg) { $(#content).html(arg); } }) }

#采用
submitJsonp1,由於我的url是同源,則發送數據接收數據都可正確


結果:技術分享

例子(2):若為不同源情況,新創建sunkai project 將端口改為9000

技術分享

 <input type="button" value="發送2" onclick="submitJsonp2();">
    <input type="button" value="發送3" onclick="submitJsonp3();">
    <script src="/static/jquery-3.2.0.js"></script>
    <script>
        function submitJsonp1(){
            $.ajax({
                url:/ajax3.html,
                type:GET,
                data:{nid:2},
                success:function (arg) {
                    $(#content).html(arg);
                }
            })
        }
        function submitJsonp2() {
            var tag = document.createElement(script);
            tag.src = http://127.0.0.1:9000/xiaokai.html;
            document.head.appendChild(tag);
            document.head.removeChild(tag);

        }
        function func(arg) {
           $(#content).html(arg);
        }

#采用 submitJsonp2,這裏的關鍵就是func()聯系了兩個不同源網頁


結果 (發送二):

技術分享

例子三(和例子二做對比):

 function submitJsonp3() {
            $.ajax({
                url:http://127.0.0.1:9000/xiaokai.html,
                type:GET,
                dataType:jsonp
            })
        }
        function func(arg) {
           $(#content).html(arg);
        }
這裏的重點就是
dataType:‘jsonp‘,雖然都是Ajax發送,但是jsonp內部封裝一種方式,使之簡單。


結果:技術分享

結論:JSONP是一種方式,隨機生成script塊,添加到<head>裏面再移除掉,==》可以和其他網站交互。

JSONP實現Ajax跨域