JSONP學(xué)習(xí)筆記

1. parseInt(n,10)

以10進(jìn)制的方式把字符串n轉(zhuǎn)換為整型

2. git 回到以前的狀態(tài)

git log
git reset 7fagfgdfgdfgdsf --hard

3. 隨機(jī)數(shù)

Math.random() > 0.5

4. 圖片加載成功和圖片加載失敗

image是圖片便簽
image.onload = function(){
    加載成功就執(zhí)行這里的代碼
}
imgae.onerror = function(){}

5. 怎么刷新當(dāng)前頁面?

window.location.reload()

6. 怎么用圖片發(fā)請求?

利用圖片的src發(fā)送get請求,不過注意要返回一個(gè)真的圖片


7. 通過script的src也可以發(fā)請求

不過要在body里面創(chuàng)建script標(biāo)簽,并且注意server.js里要寫application/javascript。好處是不用發(fā)送一張圖片。這個(gè)方案叫SRJ:server render JavaScript

8. 監(jiān)聽一個(gè)標(biāo)簽,成功加載后就刪掉

label.onload = function(e){
    e.currentTarget.remove()
}

9. srj只能用get請求。

10. script的src可以向不同源的網(wǎng)站發(fā)送請求。

11. 為什么JSONP不支持POST方法?

  1. 因?yàn)镴SONP的原理是通過動(dòng)態(tài)地創(chuàng)建script標(biāo)簽來發(fā)送數(shù)據(jù)
  2. 我們動(dòng)態(tài)創(chuàng)建script的時(shí)候只能用get,不能用POST

JSONP只支持GET請求,CORS支持所有類型的HTTP請求。JSONP的優(yōu)勢在于支持老式瀏覽器,以及可以向不支持CORS的網(wǎng)站請求數(shù)據(jù)。

12. 什么是jsonp

JSONP是服務(wù)器與客戶端跨源通信的常用方法。
最大特點(diǎn)就是簡單適用,老式瀏覽器全部支持,服務(wù)器改造非常小。
它的基本思想是,網(wǎng)頁通過添加一個(gè)script元素,向服務(wù)器請求json數(shù)據(jù),這種做法不受同源政策限制;服務(wù)器收到請求后,將數(shù)據(jù)放在一個(gè)指定的回調(diào)函數(shù)里傳回來。

JSONP

請求方:frank.com 的前端程序員(瀏覽器)
響應(yīng)方:jack.com 的后端程序員(服務(wù)器)

請求方創(chuàng)建 script,src 指向響應(yīng)方,同時(shí)傳一個(gè)查詢參數(shù) ?callbackName=yyy
響應(yīng)方根據(jù)查詢參數(shù)callbackName,構(gòu)造形如yyy.call(undefined, '你要的數(shù)據(jù)')
yyy('你要的數(shù)據(jù)')這樣的響應(yīng).
瀏覽器接收到響應(yīng),就會(huì)執(zhí)行 yyy.call(undefined, '你要的數(shù)據(jù)')
那么請求方就知道了他要的數(shù)據(jù)
這就是 JSONP

約定:

callbackName -> callback
yyy -> 隨機(jī)數(shù) frank12312312312321325()
jQuery 用法

 $.ajax({
 url: "http://jack.com:8002/pay",
 dataType: "jsonp",
 success: function( response ) {
     if(response === 'success'){
     amount.innerText = amount.innerText - 1
     }
 }
 })

13.實(shí)現(xiàn)yjq.com向mayun.com發(fā)送請求


  1. 在yjq.com:8001處發(fā)送http://localhost:8002/pay請求
pay.addEventListener('click', function (e) {
            var script = document.createElement('script')
            document.body.appendChild(script)
            script.src = 'http://localhost:8002/pay'
            e.curretTarget.remove()
        })
  1. 在mayun.com的server.js處修改代碼:
if(path === '/pay'){
            response.statusCode = 200
            var number = fs.readFileSync('./db','utf-8')
            var newNumber = number - 1
            fs.writeFileSync('./db',newNumber)
            response.setHeader('Conttent-Type','application/javascript')
            response.write(`
            alert('這是來自jmayun.com的代碼')
            `)
            response.end()
  1. 最后開啟兩個(gè)server.js,成功接收到來自mayun.com的代碼
    [圖片上傳失敗...(image-ad72f6-1553065991823)]

14. 總結(jié)

前端一開始只能使用form表單向服務(wù)器發(fā)送請求,但后來發(fā)現(xiàn)用img標(biāo)簽的src也發(fā)送get請求,但用img發(fā)送請求還需要返回一張圖片,因此又使用動(dòng)態(tài)地創(chuàng)建script元素來發(fā)送請求,衍生出了JSONP。由于script標(biāo)簽的src是可以跨域的,因此jsonp發(fā)送的請求也是可以跨域發(fā)送,且對老式瀏覽器兼容。

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

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

  • 原始時(shí)代 在最早的時(shí)候,當(dāng)我們需要向服務(wù)器提交請求時(shí),用的是 表單提交到服務(wù)器,服務(wù)器接收到請求并且返回響應(yīng)后,瀏...
    Criya閱讀 2,322評(píng)論 0 0
  • 1. JSONP的實(shí)現(xiàn)原理 JSONP是通過動(dòng)態(tài)創(chuàng)建script實(shí)現(xiàn)的。請求方:frank.com 的前端程序員(...
    王童孟閱讀 553評(píng)論 0 2
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 28,801評(píng)論 1 45
  • 請先了解:《阮一峰:瀏覽器同源政策及其規(guī)避方法》 注意:請首先更新之前用過的 nodejs-test 代碼,否則會(huì)...
    格林姆大師閱讀 489評(píng)論 0 0
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,632評(píng)論 1 32

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