vue项目一般用axios代替jQuery发送ajax请求,但是不支持jsonp格式,需要安装jsonp的依赖包,这就很不爽了,能自己轻易实现的,为什么要引乱七八糟的插件。jsonp其实就是利用<script>标签没有跨域限制的“漏洞”(历史遗迹啊)来达到与第三方通讯的目的。

那我就直接自己创建script就好了,还用你jsonp干什么。生死看淡,那就试试呗;

mounted是vue的生命周期中的钩子,用其他库开发的,直接用mounted内的部分即可。

    mounted(){
//axios不支持jsonp,就直接用创建js解决跨域问题
const script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'http://api.map.baidu.com/location/ip?coor=bd09ll&ak=zdID84p3fMRLNHzegSlgSbe9';
document.body.appendChild(script);
}

上文的代码看起来没错,但是报错了

Uncaught SyntaxError: Unexpected token :

因为该script的内容为{},前后均无分号;script.src添加个  callback=null  ,就不报错了

script.src = 'http://api.map.baidu.com/location/ip?callback=null&coor=bd09ll&ak=zdID84p3fMRLNHzegSlgSbe9';

那么又有个新问题,我跨域请求来的数据怎么保存下来,没错就是用callback调用函数

mounted(){
//axios不支持jsonp,就直接用创建js解决跨域问题
const script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'http://api.map.baidu.com/location/ip?callback=show&coor=bd09ll&ak=zdID84p3fMRLNHzegSlgSbe9';
document.body.appendChild(script);
window.show = function (json) {//不添加window,callback找不到
console.log(json)
}
},

关于回调函数要强调的是,不添加window,callback是找不到的,因为callback的this是window,mounted中函数的this是vue实例。

今天要分享的就是这些,啦啦啦,晚上回学校领毕业证去。我的大学接近尾声了。

手动创建script解决跨域问题(jsonp从入门到放弃)的更多相关文章

  1. 解决跨域问题-jsonp&cors

    跨域的原因 浏览器的同源策略 同源策略是浏览器上为安全性考虑实施的非常重要的安全策略. 指的是从一个域上加载的脚本不允许访问另外一个域的文档属性. 举个例子:比如一个恶意网站的页面通过iframe嵌入 ...

  2. 动态创建 script 实现跨域请求数据

    动态创建script标签 (由事件触发) 在我们需要请求数据的时候我们就可以动态的创建 script 标签 src设置为我们需要请求数据的地址 另外我们可以附加参数 ?后面附加参数 例如 :?参数=1 ...

  3. 学习AJAX必知必会(4)~同源策略、解决跨域问题(JSONP、CORS)

    一.同源策略(Same-Origin Policy),是浏览器的一种安全策略. 1.同源(即url相同):协议.域名.端口号 必须完全相同.(请求是来自同一个服务) 2.跨域:违背了同源策略,即跨域. ...

  4. 动态Script标签 解决跨域问题

     动态Script 解决跨域问题 1.动态创建scriptcreateScript : function(src){ var varScript = document.createElement(&q ...

  5. jquery跨域解决方案JSONP

    1.在互联网中我们的计算机是通过IP来定位的,但是IP比较难记忆,因此通过domain name(域名)来取代IP 2.什么是跨域? (1)默认浏览器为了安全问题,禁止了xmlhttprequest跨 ...

  6. ajax解决跨域

    http://www.cnblogs.com/sunxucool/p/3433992.html 为什么会出现跨域跨域问题来源于JavaScript的同源策略,即只有 协议+主机名+端口号 (如存在)相 ...

  7. 如何用Nginx解决跨域问题

    一. 产生跨域的原因 1.浏览器限制 2.跨域 3.XHR(XMLHttpRequest)请求 二. 解决思路 解决跨域有多重,在这里主要讲用nginx解决跨域 1.JSONP 2.nginx代理 3 ...

  8. AJAX跨域问题解决方法(2)——JSONP解决跨域

    JSONP是什么?JSON全称为JSON with Padding,是JSON的一种补充的使用方式,不是官方协议. 使用JSONP服务器后台要改动吗?JSONP不同于一般的ajax请求返回json对象 ...

  9. JSONP解决跨域问题,什么是JSONP(转)

    原文链接:https://www.cnblogs.com/xinxingyu/p/6075881.html 说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的 ...

随机推荐

  1. Consul集群搭建

    一.集群搭建 准备三台机器 需要开启的端口,8300, 8301, 8500, 8600 机器1: 172.16.106.201 ./consul agent -server -bootstrap-e ...

  2. 【并发】1、关于线程的几种状态&关于yield的理解

    最近在看disruptor源码,在获取ringbuffer的下一个序列的时候,disruptor有几种等待策略,其中有YieldingWaitStrategy类,是使用java的Thread.yiel ...

  3. Storm官方提供的trident单词计数的例子

    上代码: public class TridentWordCount { public static class Split extends BaseFunction { @Override publ ...

  4. (转)shlex — 解析 Shell 风格语法

    原文:https://pythoncaff.com/docs/pymotw/shlex-parse-shell-style-syntaxes/171 这是一篇协同翻译的文章,你可以点击『我来翻译』按钮 ...

  5. 转:QTCreater调试时提示ptrace不允许的操作(点击调试之后40秒钟gdb无回应)

    1. 问题描述 用QTCreater建立了一个纯C++的项目,但是在F5调试时,竟然提示ptrace不允许的操作,修改工程配置为Debug也不管用,经过网上搜索,原来还需要修改一下系统ptrace的配 ...

  6. Spring Boot + Redis

    启动redis docker run --name redisServer -P -d redis redis自带客户端,启动客户端 docker run -it --link redisServer ...

  7. 帝国CMS-后台使用

    后台管理----- 网址wxtoupiao111.com 后台http://wxtoupiao111.com/e/admin/账号密码认证码admin 数据库 账号root  密码空http://wx ...

  8. JVM 运行时数据区详解

    一.运行时数据区 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同数据区域. 1.有一些是随虚拟机的启动而创建,随虚拟机的退出而销毁,所有的线程共享这些数据区. 2.第二种则 ...

  9. js字符串替换

    <script language="javascript">var r= "1\n2\n3\n";//将字母\n替换成分号alert(r.repla ...

  10. Linux-(telnet,wget)

    telnet命令 telnet命令通常用来远程登录.telnet程序是基于TELNET协议的远程登录客户端程序.Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和 ...