JSONP

通過跨域去請(qǐng)求服務(wù)端數(shù)據(jù)
需要客戶端與服務(wù)端
必須違反同源協(xié)議:同協(xié)議 同域名 同端口

客戶端:
通過script標(biāo)簽的src向不同的服務(wù)器請(qǐng)求數(shù)據(jù)
只能以get方式請(qǐng)求數(shù)據(jù)
src:它是一種資源請(qǐng)求, 不存在跨域
script標(biāo)簽:它引入的是js 并且將js執(zhí)行一遍

封裝一個(gè)方法(jsonp)
通過傳入請(qǐng)求路徑(url) 以及預(yù)先協(xié)商好的回調(diào)函數(shù)名字(callbackName)請(qǐng)求數(shù)據(jù)

function jsonp(url, callbackname) {

需要?jiǎng)討B(tài)創(chuàng)建script標(biāo)簽

let script = document.createElement('script');

給script標(biāo)簽添加src路徑 = url + 回調(diào)函數(shù) + 回調(diào)函數(shù)名字

script.src = url + '?callback=' + callbackname

將創(chuàng)建的script標(biāo)簽插入body

document.body.appendChild(script);
}

調(diào)用jsonp傳入url以及callbackName

jsonp('http://127.0.0.1:3000/jsonp', 'aa');

回調(diào)函數(shù)響應(yīng)服務(wù)端數(shù)據(jù)

function aa(data) {
        console.log(data)
    }

服務(wù)端思路:

引入http模塊—>創(chuàng)建服務(wù),監(jiān)聽端口-->獲取客戶端請(qǐng)求路徑,引入 url模塊—>實(shí)例化URL獲取客戶端請(qǐng)求路徑, 并將路徑附給一個(gè)變量AppUrl—>通過AppUrl.pathname判斷請(qǐng)求的路徑—>通過AppUrl.searchParams.get()獲取回調(diào)函數(shù)名字—> res.end響應(yīng)前端數(shù)據(jù),通過回調(diào)函數(shù)將數(shù)據(jù)返回給客戶端預(yù)先定義好的callback函數(shù)里

引入模塊:

const http = require('http');
const {URL} = require('url');

創(chuàng)建服務(wù),監(jiān)聽端口

http.createServer((req, res)=> {
    const appUrl = new URL('http://127.0.0.1:3000' + decodeURIComponent(req.url));
    if(appUrl.pathname === '/jsonp') {
        // 獲取到預(yù)先定義好的callback函數(shù)名字
        let callbackName = appUrl.searchParams.get('callback');
        res.end(callbackName + '(' + JSON.stringify({name: 123, age: 18}) + ')')
    }
}).listen(3000, err=> {
    console.log('服務(wù)啟動(dòng)成功')
})

今天的分享就到這里啦,如有錯(cuò)誤,歡迎不吝指出,筆芯~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容