Heim  >  Fragen und Antworten  >  Hauptteil

Javascript – JSONP kann nur Get Reason verwenden

Warum kann JSONP nur Get-Anfragen verwenden? Liegt es an bestimmten Get-Gründen oder anderen Gründen? Ich habe das Dokument überprüft und festgestellt, dass dies durch die Eigenschaften der Technologie selbst bestimmt wird Erzählen Sie mir davon. Worauf bezieht sich das Merkmal selbst? Können Sie es im Detail erklären? Vielen Dank!

阿神阿神2688 Tage vor1244

Antworte allen(5)Ich werde antworten

  • PHP中文网

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

    JSONP 是一种
    【请求一段 JS 脚本,把执行这段脚本的结果当做数据】
    的玩法。

    所以,你能 POST 一段通过 script 标签引入的脚本吗?

    (如果看过 JSONP 库的源码就知道,常见的实现代码其实就是 document.createElement('script') 生成一个 script 标签,然后插 body 里而已。在这里根本没有设置请求格式的余地)。

    Antwort
    0
  • 世界只因有你

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

    域名A中的JS代码AJAX请求域名为B的服务器数据,这就是跨域AJAX请求,默认情况下是不行的。

    但是HTML中有地方可以跨域请求,比如img script标签,它们的src属性指向的地址可以是不在域名A下的(即跨域)。

    那有人就利用了上面的特点,选择了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标签,<script src="http://path/to/server/b?A=a&B=b&callbackFunctionName=myCallback"></script>,从而触发对指定地址的GET请求

    2. 那服务器端对这个GET请求进行处理,并返回字符串 "myCallback('response value')"

    3. 那前端script加载完之后,其实就是在script中执行myCallback('response value')

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

    5. 是不是就是只能用GET

    Antwort
    0
  • 黄舟

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

    类似于给你的页面里面动态加了一段js 代码,你觉得js文件可以post吗?

    Antwort
    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的.

    Antwort
    0
  • 代言

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

    因为<script>标签,只支持GET

    Antwort
    0
  • StornierenAntwort