首頁  >  問答  >  主體

javascript - jsonp只能用get原因

為什麼jsonp只能使用get請求,是因為get的一些原因,還是post的某些原因,還是一些別的原因,我查文檔說是'這是由於該技術本身的特性所決定的' 請問這種本身的特性是指的什麼,能不能具體的說明一下。萬分感謝!

阿神阿神2688 天前1243

全部回覆(5)我來回復

  • PHP中文网

    PHP中文网2017-06-12 09:30:42

    JSONP 是一種
    【請求一段 JS 腳本,把執行這段腳本的結果當作資料】
    的玩法。

    所以,你能 POST 一段透過 script 標籤引入的腳本嗎?

    (如果看過 JSONP 函式庫的原始碼就知道,常見的實作程式碼其實就是 document.createElement('script') 產生一個 script 標籤,然後插 body 裡而已。這裡根本沒有設定請求格式的餘地)。

    回覆
    0
  • 世界只因有你

    世界只因有你2017-06-12 09:30:42

    域名A中的JS代碼AJAX請求域名為B的伺服器數據,這就是跨域AJAX請求,預設情況下是不行的。

    但是HTML中有地方可以跨域請求,例如img script標籤,它們的src屬性指向的位址可以是不在網域名稱下的(即跨域)。

    那有人就利用了上面的特點,選擇了script中src能夠跨域獲得內容的特性,研究出了JSONP這種hack協議。 (src中請求都是GET)

    那假設JSONP請求如下:

    jsonp({
        url: 'http://path/to/server/b',
        params: {A: a, B: b},
        success: function myCallback (response) {}
    })

    背後其實在進行:

    1. 拼接一個script標籤,,從而觸發對指定位址的GET請求

    2. 那伺服器端對這個GET請求進行處理,並回傳字串 "myCallback('response value')"

    3. 那前端script載入完之後,其實就是在script中執行myCallback('response value')

    4. 是不是就完成了跨域的請求,

    5. 是不是就是只能用GET

    回覆
    0
  • 黄舟

    黄舟2017-06-12 09:30:42

    類似於給你的頁裡面動態加了一段js 程式碼,你覺得js檔案可以post嗎?

    回覆
    0
  • 给我你的怀抱

    给我你的怀抱2017-06-12 09:30:42

    假設你要求的地址傳回這麼個網頁.

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <script src="jquery.min.js"></script>
    </head>
    <body>
        
    </body>
    </html>

    瀏覽器拿到這個網頁後要解析, 解析到

    <script src="jquery.min.js"></script>

    這一行程式碼的時候, 就知道這裡需要一個js檔, 於是再發起一個請求, 去拿這個js檔. 這個請求只能用GET方法, 不可能是POST, 就好像你在瀏覽器地址欄輸入地址回車進入一樣.

    JSONP的實現原理就是創建一個script標籤, 再把需要請求的api地址放到src裡. 所以只能是GET的.

    回覆
    0
  • 代言

    代言2017-06-12 09:30:42

    因為