跨域请求数据也是可以的,只不过Ajax这技术不行,而JSONP这种数据格式可以进行跨域。很多年前,浏览器是没有跨域限制的,可以正常跨域,浏览器为了安全和隐私限制了Ajax跨域

JSONP原理就是:将函数执行的部分,放到了服务器上面。

JSONP的优缺点:

优点:

与利用XHR对象发送Ajax请求不同,JSONP可以跨越同源策略;

JSONP的兼容性好,可以在众多浏览器中运行。

缺点:

只支持GET一种类型的HTTP请求,应用场景有限;

调用失败时缺少必要的提示信息,不方便排查问题;

存在一定的安全风险,但可以使用Referer和Token校验进行规避;

不便于控制;

没有回调函数的功能。

原生JSONP跨越请求数据

如果想获取别人服务器上的JSONP数据,你必须声明一个和别人服务器上的同名函数(也可以改名)

        <div id='btn'>
按钮
</div> <script type="text/javascript">
// 封装成方法
var btn = document.getElementById("btn"); function JSONP(url, callback){
//给传进来的匿名函数起名,并定义在全局,window.回调函数名
window.jQuery1102018240398381236766_1558663885975 = callback;
//创建DOM
var oscript = document.createElement('script');
oscript.src = url;
//上树
document.body.appendChild(oscript);
//过河拆桥,拿完下树
document.body.removeChild(oscript);
} //发起请求
btn.onclick = function(){
JSONP("https://www.baidu.com/sugrec?pre=1&p=3&ie=utf-8&json=1&prod=pc&from=pc_web&sugsid=1457,21101,18559,29063,28519,29098,28720,28964,28835,28585,26350&wd=abc&req=2&csor=3&pwd=ab&cb=jQuery1102018240398381236766_1558663885975&_=1558663885984", function(data){
console.log(data); //data数据是从函数执行部分传过来的
})
}
</script>

jQuery的JSONP跨域

jQuery对JSONP进行了封装,jsonCallback就是传进去的函数名字

        <div id='btn2'>
按钮2
</div>
<script>
// jquery 的jsonp
var btn2 = document.getElementById("btn2");
btn2.onclick = function(){
$.ajax({
url:"https://www.baidu.com/sugrec?pre=1&p=3&ie=utf-8&json=1&prod=pc&from=pc_web&sugsid=1457,21101,18559,29063,28519,29098,28720,28964,28835,28585,26350&wd=abc&req=2&csor=3&pwd=ab&cb=?&_=1558663885984",
dataType:"jsonp",
// jsonpCallback:"jQuery1102018240398381236766_1558663885975",
success:function(data){
console.log(data)
}
})
}
</script>

用jQuery跨域的时候,url中的callback后面是函数的名称,也可以自己修改函数名。

如果url的callback后面是?号,不用写jsonpCallback回调函数,jQuery会随机的命名函数。

33、JSONP跨域的更多相关文章

  1. jsonp跨域简单应用(一)

    转载:http://www.cnblogs.com/cyg17173/p/5865364.html ashx+jsonp+document.referrer   -- 一年前学的JSONP 跨域,一年 ...

  2. ajax jsonp跨域 【转】

    跨域的基本原理:    JSONP跨域GET请求是一个常用的解决方案,    JSONP的最基本的原理是:动态添加一个<script>标签,而script标签的src属性是没有跨域的限制的 ...

  3. JSONP跨域资源共享的安全问题

    目录 关于 JSONP 一.JSON 劫持 二.Callback 可定义导致的安全问题 三.其他文件格式( Content-Type )与 JSON 四.防御 摘自:http://blog.known ...

  4. 原生JS封装Ajax插件(同域&&jsonp跨域)

    抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的...简单说说思路,如有不正 ...

  5. 借助node实战JSONP跨域

    一.前言: 浏览器安全是基于同源策略的.所谓同源策略就是三相同: 1.协议相同: 2.域名相同: 3.端口相同. 但,凡事都是有利弊,同源策略也导致了我们想用AJAX跨域请求,但NO!!为了规避这种限 ...

  6. jsonp跨域+ashx(示例)

    前言 做B/S项目的时候,我们一般使用jquery+ashx来实现异步的一些操作,比如后台获取一些数据到前台,但是如果ashx文件不在本项目下,引用的是别的域下的文件,这时候就访问不了.关于jsonp ...

  7. Jsonp跨域访问

    很早之前看过好几篇跨域访问的文章,然后做项目的时候基本没有遇到跨域访问的问题.不过该来的还是会来,前些天终于让我遇到了.于是重温了一下原理这些,再进行实战.于是现在也敢通过实战后的一些理解来和大家分享 ...

  8. jsonp 跨域请求

    背景: JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重要的安全性限制,被称为"Same-Origin Policy"(同源 ...

  9. 我的jsonp跨域问题

    关于jsonp跨域问题,在这个方面也是了解一点点,先记录下来,主要作为以后查看,之前下载并安装过wampserver,了解到了jsonp和json的区别,现在谈谈跨域这个问题: 首先什么是跨域,简单地 ...

随机推荐

  1. php date之间的相互转换

    字符串转成date $str =date("Y-m-d H:i:s",strtotime("2011-12-12 14:23:01")); echo $str; ...

  2. Nodejs下如何判断文件夹的存在以及删除文件夹下所有的文件

    代码如下: var folder_exists = fs.existsSync('./cache'); if(folder_exists == true) { var dirList = fs.rea ...

  3. Struts2中properties

  4. php设计模式之--组合模式

    php组合模式主要用于上下级关系,可以新增叶子和树枝,分析如下代码即可明白组合模式的含义: <?php header('Content-Type:text/html;charset=utf-8' ...

  5. 基于S3C2440的linux-3.6.6移植——LED驱动【转】

    本文转载自:http://www.voidcn.com/blog/lqxandroid2012/article/p-625005.html 目前的linux版本的许多驱动都是基于设备模型,LED也不例 ...

  6. Gym - 100283F F. Bakkar In The Army —— 二分

    题目链接:http://codeforces.com/gym/100283/problem/F F. Bakkar In The Army time limit per test 2 seconds ...

  7. webform中实现SQL Sever2008数据库数据分页查询

    1 分页     1.1         数据库中存储过程             已知 当前页  pageIndex  页容量 pageSize             求  总页数 pageCou ...

  8. Loadrunner脚本自动关联和手动关联

    关于Loadrunner关联一.什么时候需要关联 1.关联的含义        关联(correlation):在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服 ...

  9. codeforces B. Fox and Cross 解题报告

    题目链接:http://codeforces.com/problemset/problem/389/B 题目意思:给出一个由n行n列组成的board,其中'#'表示的一片地方恰好能画满十字架,画满的意 ...

  10. telnet命令发送邮件

    下面的例子是用qq的smtp服务器. set localecho 本地回显启用 smtp.qq.com Esmtp QQ Mail Server helo sis smtp.qq.com//服务器返回 ...