手撕题之 JSONP

简介: 其实我在面试的时候没碰见过写 JSONP 的,但每次面试前我都会写一次 实现原理 利用script可以跨域请求实现,通过动态插入script标签,将src属性设置为目标请求,插入dom中,服务器接受该

其实我在面试的时候没碰见过写 JSONP 的,但每次面试前我都会写一次

实现原理

利用script可以跨域请求实现,通过动态插入script标签,将src属性设置为目标请求,插入dom中,服务器接受该请求并返回数据,数据通常被包裹在回调钩子中,然后浏览器解析 script并执行后端返回的回调+数据,而jsonp也因为是依赖scirpt实现,而script标签请求资源只支持get请求,所以jsonp无法使用post请求

实现代码

<body></body>
<script>
  // index.html  http://127.0.0.1:5500/index.html
  
  const jsonp = (url, params, cbName) => {
    const script = document.createElement("script");
    window[cbName] = (data) => {
      // do something
      console.log("back " + data);
      document.body.removeChild(script);
    };
    params = { ...params, callback: cbName };
    const arr = Object.keys(params).map((key) => `${key}=${params[key]}`);
    script.src = `${url}?${arr.join("&")}`;
    document.body.appendChild(script);
  };
  
  jsonp("http://127.0.0.1:8000", {}, "callback");
</script>

相同原理

  1. <link herf="url"></link>
  2. <img src="url"></img>

上面这个两个加载资源的标签同jsonp,不受跨域限制

也可以使用 iframe解决

使用场景

  1. 用于解决前端和后端交互数据时出现的跨域问题
  2. 现在常用与一些老浏览器不支持CORS时采用的针对GET请求的跨域解决方案(即 JSONP 不支持 POST

JSONP 为什么不能发送 POST

jsonp因为是依赖scirpt实现,而script元素请求资源只支持get请求,所以jsonp无法使用post请求

相关文章
|
8月前
|
XML 前端开发 JavaScript
重学Ajax
重学Ajax
67 0
|
Web App开发 XML 缓存
面试还不会 Ajax?拿来把你!
Ajax(Asynchronous Javascript And XML) - 最近想着去找个面试,然后看到 Ajax 也是考点之内(面向关键字面试),虽然已经用了很久的 axios 但没有系统的学过 Ajax,所以就有今天这篇文章。
|
缓存 JavaScript 前端开发
开心档之jQuery - AJAX get() 和 post() 方法
【摘要】 jQuery - AJAX get() 和 post() 方法jQuery get() 和 post() 方法用于通过 HTTP GET 或 POST 请求从服务器请求数据。HTTP 请求:GET vs. POST两种在客户端和服务器端进行请求-响应的常用方法是:GET 和 POST。GET - 从指定的资源请求数据POST - 向指定的资源提交要处理的数据GET 基本上用于从服务器获得(取...
|
XML 存储 JSON
Ajax第三天笔记总结(一)
Ajax第三天笔记总结(一)
157 0
Ajax第三天笔记总结(一)
|
移动开发 前端开发 JavaScript
Ajax第三天笔记总结(二)
Ajax第三天笔记总结(二)
75 0
Ajax第三天笔记总结(二)
|
前端开发
Ajax第五天笔记总结(二)
Ajax第五天笔记总结(二)
115 0
Ajax第五天笔记总结(二)
|
JSON 前端开发 数据格式
牛客刷题——前端面试【三】谈一谈Promise、封装ajax、json数据使用
如何使用Promise、封装ajax、json数据以下方法告诉你。
199 0
|
JSON 缓存 前端开发
Ajax学习记录
Ajax学习记录
132 0
Ajax学习记录
|
JSON 缓存 前端开发
还在死磕 Ajax?那可就 out 了!
江山代有人才出,各领风骚数百年。
101 0
还在死磕 Ajax?那可就 out 了!
|
前端开发
为了懒,我痛心学习Ajax(三)
4.注册提示效果 4.1 login.jsp 4.2 controller 4.3 测试:
为了懒,我痛心学习Ajax(三)

热门文章

最新文章

相关课程

更多
下一篇
开通oss服务