【前端學習筆記】原生Javascript中通過JSONP(前端常用方法)進行跨域

來源:互聯網
上載者:User

標籤:javascript   ajax   前端   jsonp   

Ajax跨域—————————————————————————-

跨域: 跨網域名稱一個網域名稱下的檔案去請求了和他不一樣的網域名稱下的資源檔,那麼就會產生跨域請求這是ajax的跨域限制問題跨域的解決 : jsonp: json width padding核心:     1.script標籤    2.用script標籤載入資源是沒有跨域問題的    3.script只認檔案的實際內容,而不是尾碼。只要內容是合法的js就能用流程:    1.在資源載入進來之前定義好一個函數,這個函數接受一個參數(要取的資料)    ,而將要載入過來的檔案裡執行這個函數並將要取的資料作為參數來傳遞。    2.在需要的時候,通過script標籤載入對應遠程檔案資源,當遠端資源被載入進來    的時候,就會執行定義好的函數,並將要取的資料作為參數傳遞到當前檔案。原理拓展:    動態地負載檔案,例如點擊以後才負載檔案,就在點擊事件裡給body添加script標籤    然後讓該sciprt的src為檔案地址,用url後面的callback參數來控制調用方法的方法名。

執行個體:
以下代碼需要在伺服器環境下運行
布局代碼

<body>    <input type="button" value="載入數字" />    <ul></ul>    <input type="button" value="載入字母" />    <ul></ul>    <input type="button" value="載入數字" />    <ul></ul></body>

JS代碼

function fn0(data){    var aUl = document.getElementsByTagName(‘ul‘);    for(var i = 0; i < data.length; i++)    {        var oLi = document.createElement(‘li‘);        oLi.innerHTML = data[i];        aUl[0].appendChild(oLi);    }}function fn1(data){    var aUl = document.getElementsByTagName(‘ul‘);    for(var i = 0; i < data.length; i++)    {        var oLi = document.createElement(‘li‘);        oLi.innerHTML = data[i];        aUl[1].appendChild(oLi);    }}function fn2(data){    var aUl = document.getElementsByTagName(‘ul‘);    for(var i = 0; i < data.length; i++)    {        var oLi = document.createElement(‘li‘);        oLi.innerHTML = data[i];        aUl[2].appendChild(oLi);    }}window.onload=function(){    var aInput = document.getElementsByTagName(‘input‘);    var aUl = document.getElementsByTagName(‘ul‘);    for(var i=0;i<aInput.length;i++)    {        (function(i){            aInput[i].onclick=function(){                var oScript = document.createElement(‘script‘);                oScript.src = ‘data.php?t=num&callback=fn‘+i;                document.body.appendChild(oScript);            }        })(i);    };}

後端代碼(php)

//data.php<?php      $t = isset($_GET[‘t‘]) ? $_GET[‘t‘] :‘num‘;    //前端告訴後端要輸出哪個資料,這裡是判斷輸出的數組是    //$arr1還是$arr2    $callback = isset($_GET[‘callback‘]) ? $_GET[‘callback‘] :‘fn0‘;    //動態產生調用資料的方法,不必在後台寫死,預設調用fn0    //假設資料是兩個不同數組    $arr1 = array(‘111111‘,‘222222222‘,‘3333333333‘,‘44444444‘);     $arr2 = array(‘aaaaaaaa‘,‘bbbbbbbb‘,‘ccccccccc‘,‘dddddddd‘);    //按照前台的標誌來判斷返回的資料     if($t == ‘num‘){        $data = json_encode($arr1);        echo $callback."(".$data.")";    }    else{        $data = json_encode($arr2);        echo $callback."(".$data.")";    }

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

【前端學習筆記】原生Javascript中通過JSONP(前端常用方法)進行跨域

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.