要谈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);
})
}

最新文章

  1. EF 配置(SqlServer,Mysql)
  2. PHP apache2.2 mysql 的安装
  3. go - 复合类型 array, slice, map
  4. 面试题-Java Web-JSP部分
  5. Attribute(特性)与AOP
  6. python 模拟浏览器登陆coursera
  7. 利用Runtime实现简单的字典转模型
  8. MyBatis - 介绍、简单入门程序
  9. Ubuntu: Windows Help Tools For Ubuntu
  10. maven-compiler-plugin报错
  11. Scrapy框架的执行流程解析
  12. 结构体类型struct
  13. hdu 4544——消灭兔子
  14. R语言的scale函数
  15. (转)MVC一个页面多个submit
  16. postgresql和redis
  17. bitMap算法实现以及ckHash函数类,将字符串映射成数字,同时可以将数字映射成字符串
  18. Counting
  19. 电子商务(电销)平台中订单模块(Order)数据库设计明细
  20. ueditor上传图片配置

热门文章

  1. using the library to generate a dynamic SELECT or DELETE statement mysqlbaits xml配置文件 与 sql构造器 对比
  2. E.F.Codd IBM Oracle
  3. rbac - 初识
  4. Struts2的ActionContext
  5. 怎么在Linux上抓包分析
  6. Mirror--日志流压缩
  7. 将expression转化为数据类型int时发生算术溢出错误
  8. Redhat 7改动默认执行级别方法 --RHEL7使用systemd创建符号链接指向默认执行级别
  9. 如何确定selenium ID元素是否查找正确
  10. java多线程(四)