麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發(fā) > AJAX > 正文

使用script的src實(shí)現(xiàn)跨域和類似ajax效果

2024-09-01 08:32:55
字體:
供稿:網(wǎng)友
在解決js的跨域問題的時候, 有多種方式, 其中有一種是利用script標(biāo)簽的src屬性,因?yàn)檫@個屬性是不受域名限制的,我們可以直接讓src的這個鏈接指向跨域網(wǎng)站的一個接口, 這個接口返回的是js代碼或者json格式數(shù)據(jù), 從而實(shí)現(xiàn)跨域獲取數(shù)據(jù)。
 
 

場景

假如有兩個域名不同的服務(wù)器, a.com和b.com, 在b.com/b_return_js.php這個接口里, 可以獲取一些數(shù)據(jù)。 當(dāng)然,假如是b.com的頁面里, 可以使用ajax, 直接請求這個接口, 但如果在a.com的頁面里如果請求呢。

b_return_js.php的接口代碼:

 

復(fù)制代碼代碼如下:

$a = array(
    array('username'=>'tony', 'age'=>25),
    array('username'=>'yimeng', 'age'=>23),
    array('username'=>'ermeng', 'age'=>22),
    array('username'=>'sanmeng', 'age'=>21),
);
shuffle($a);

 

echo 'var userdata = '.json_encode($a).';'; //一般如果是b.com的站內(nèi)請求就直接返回json_encode($a)了, 但如果要用src屬性實(shí)現(xiàn)跨域, 這里我們需要將該值賦給一個js變量, 保證在script標(biāo)簽加載后的頁面里能獲取到這個數(shù)據(jù)并使用。

 

簡單實(shí)現(xiàn)

有一種簡單的方法就是在a.com下的頁面里, 直接

 

復(fù)制代碼代碼如下:

<script src="http://b.com/b_return_js.php"></script>

 

這樣在a.com的頁面里就能直接獲取到這個接口里返回的數(shù)據(jù)了。
但這里有一個缺陷,這個數(shù)據(jù)只能在頁面加載的時候獲取到, 假如我們想要使用ajax那種可以隨時獲取新的接口數(shù)據(jù)的方式就不太適用了, 例如點(diǎn)擊一個按鈕, 從這個接口獲取數(shù)據(jù)局部刷新, 這種方式就有一些不合適了。

類ajax實(shí)現(xiàn)

其實(shí)實(shí)現(xiàn)上面說的類ajax的思路就是在ajax條件觸發(fā)的時候, 重新生成一遍上面的那個標(biāo)簽, 從而再次從接口獲取數(shù)據(jù), 但實(shí)際上實(shí)現(xiàn)起來還是略有難度(至少對我來說費(fèi)了不少功夫)。

上代碼:

假如a.com/scriptSrc.php頁面下有一個按鈕

<input type="button" id="ajax_request_from_b" value="來自B.com的請求"/>
每次點(diǎn)擊都會從b.com/b_return_js.php接口獲取數(shù)據(jù), 類似ajax的實(shí)現(xiàn)代碼:

 

復(fù)制代碼代碼如下:

function createScript()
{
    //console.log(ele);
    ele.src = 'http://b.com/b_return_js.php';
    ele.type = 'text/javascript';
    ele.language = 'javascript';
}

 

function getData()
{
    console.log(userdata);
}

$('#ajax_request_from_b').click(function(){

    //每次都需要重新加載這個script標(biāo)簽, 因此每次都要重新生成一個新的script標(biāo)          簽保證能從跨域服務(wù)器獲取數(shù)據(jù)
    if(ele && ele.parentNode)
    {
        //ele.parentNode.removeChild(ele);  //這種刪除不能將ele徹底從內(nèi)存刪除,只是移除了在dom中的位置
        for (var property in ele) {            
            delete ele[property];        //徹底刪除
         } 
    }
    ele = document.createElement('script'); //這是一個新的ele
    createScript();
    document.getElementsByTagName("head")[0].appendChild(ele);
    ele.onload = function(){getData()};  //script元素加載后方可獲取userdata, 每次獲取的都是隨機(jī)順序的用戶信息
});

 

這樣你每次點(diǎn)擊按鈕, 都會重新從接口獲取一遍數(shù)據(jù), 效果就類似于ajax, 但這是一種js跨域的方法實(shí)現(xiàn), 雖然有些吃力不討好, 但不失為一種思路。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 黄色a级片视频 | 国产精品99久久久久久大便 | av在线播放免费观看 | 欧美老外a级毛片 | 久久9久久 | 黄色av免费电影 | 国产妞干网| 中文字幕激情 | 欧美 日韩 亚洲 中文 | 狠狠久久| 在线视频观看成人 | 双性精h调教灌尿打屁股的文案 | 国产精品久久久久久久久久妇女 | 久久久久久久久久久久久九 | 久久精品视频7 | 成人偷拍片视频在线观看 | 免费国产一级淫片 | 亚洲精品成人在线视频 | 欧美一级黄色录像片 | 久久婷婷一区二区三区 | 久草在线资源福利站 | 中文字幕观看 | 成人免费观看毛片 | 电影91| 国产精品爆操 | www.国产.com| 性少妇videosexfreexxx片 | 美女又黄又www | 黄色大片免费网站 | 国产五区 | 欧美成人高清视频 | 91精品一区二区综合在线 | 成人免费网视频 | 91国内精品久久久久免费影院 | 欧美日韩在线视频一区二区 | 欧美hdfree性xxxx | 日本韩国欧美一级片 | 久久久精品视频在线观看 | 久久中文一区 | 久久久久久免费免费 | 久久福利在线 |