分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

浅谈jsonp

发布时间:2023-09-06 01:57责任编辑:林大明关键词:jsjson

要谈jsonp,首先要弄明白jsonp是什么,它是用来干嘛的。jsonp其实就是我们常用的script标签,用来解决跨域的,只不过这个标签是动态创建的,为啥要动态创建涅。

举个小栗子:

假如我们远程文件remote.js是这样的:

handle({result:‘我是远程文件派来的数据‘})

我们在本地中这样引入:

<script type="text/javascript"> ????var handle= function(data){ ???????alert(data.result); ????}; </script> <script type="text/javascript" src="跨域服务器/remote.js"></script>

这样就可以把远程文件的result弹出来。那么问题来了,远程js不知道他要调用的本地js函数名怎么办?所以,我们就动态创建一个script,把远程要调用的函数名用callback参数给服务端传过去,相当于告诉服务端,你要调用的本地函数名在callback参数里。像这样

<script type="text/javascript"> ????var handle= function(data){ ???????alert(data.result); ????}; ??????var script = document.createElement(‘script‘); ??????????script.src = ‘跨域服务器/remote?callback=‘ + handle +‘&n=‘ + Math.random();</script> 

这样一个简易版的jsonp 就算实现了,当然,其实还是可以进行封装一下的,这样想用的时候只要调用就行了:

function jsonp(url, data = {}, callback = ‘callback‘) { ???function handle(param) { ???????var str = ‘‘; ??????//处理参数 ???????for (var key in param) { ???????????str = str + ‘&‘ + key + ‘=‘ + param[key]; ???????} ???????return str; ???} ???return new Promise(function (resolve, reject) { ???????var script = document.createElement(‘script‘); ???????window[callback] = function (json) { ???????????if (json) { ???????????????resolve(json); ???????????} ???????} ???????script.src = url + ‘?callback=‘ + callback + handle(data) + ‘&n=‘ + Date.now(); ???????document.body.appendChild(script); ???})}

浅谈jsonp

原文地址:https://www.cnblogs.com/renbo/p/9130980.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved