ajax跨域jsonp —— javascript
目录
jsonp是什么
jsonp作用:解决跨域问题
为什么有跨域问题?
“同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。
这是一个用于隔离潜在恶意文件的重要安全机制。”
同源:相同协议,域名,端口号。
所以当ajax请求的地址,存在协议,域名,端口号不同时,则存在跨域问题,浏览器会报错。
jsonp时解决跨域的其中一种方法。
缺点:只支持GET请求而不支持POST等其它类型的HTTP请求
jsonp原理
- ajax 请求无法访问不同源的地址
- jsonp 不是一种新技术,可以说是一种小技巧,换种方式请求
- 首先,script 标签可以引入不同源的地址,这样不会报错
- 此时,如果 script 标签引入需要调用的后台数据接口,就可以拿到数据了,但是没有直接这么简单
- 先定义获取数据成功后的操作函数,如下面的 success 函数
- 使用 script 标签,引入需要调用的后台数据接口,参数必须附带,获取数据成功后的操作函数success
原生js使用jsonp
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<h3>控制台</h3>
<script type="text/javascript">
function success(data){
console.log('数据:', data);
// 之后对数据的处理
}
</script>
<script src="http://localhost/aa.php?callback=success¶m1=val1"></script>
</body>
</html>
<?php
// aa.php
// 获取请求参数里面的callback,获取数据成功后调用的函数名
$callback = $_GET['callback'];
$param1 = $_GET['param1']; $res = array(
array("id"=>1, "name"=>"name1"),
array("id"=>2, "name"=>"name2")
);
$res = json_encode($res); echo $callback . "(" . $res . ")"; ?>
解析:
- 先定义 success 函数,对获取数据后的操作
- 然后通过 script 标签引入后台数据接口
- 我这里后端使用 php 写的
- 先获取请求参数中 callback 的值,以及其他参数
- 对数据进行获取,编码,拼接字符串,调用 success 函数。
jquery使用jsonp
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<h3>控制台</h3>
<script type="text/javascript" src="./jquery.js"></script>
<script type="text/javascript">
$.ajax({
type: "get",
url: "http://localhost/aa.php?param1=val1",
dataType: "jsonp",
jsonp: "callback",
// 传递给后台接口,用以获得jsonp回调函数名的参数名(一般默认为:callback)
jsonpCallback:"flightHandler",
// 自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,
// 也可以写"?",jQuery会自动为你处理数据
success: function(data){
console.log('数据:', data);
// 之后对数据的处理
},
error: function(){
alert('fail');
}
});
</script>
</body>
</html>
ajax跨域jsonp —— javascript的更多相关文章
- 百度的一个Ajax跨域方法 JavaScript是没有域的限制
baidu的通行证处理都是在二级域名passport.baidu.com中处理的,但是baidu很多地方登录都好像是用ajax处理的,他是怎么做的呢?研究了一下,发现一个小技巧. 在http://zh ...
- jQuery的ajax跨域 Jsonp原理
1.Jsonp Jsonp(json with padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题. Jsonp是为了解决ajax跨域发送http请求出现的,利用S ...
- 【JS】AJAX跨域-JSONP解决方案(一)
AJAX跨域介绍 AJAX 跨域访问是用户访问A网站时所产生的对B网站的跨域访问请求均提交到A网站的指定页面 由于安全方面的原因, 客户端js使用xmlhttprequest只能用来向来源网站发送请求 ...
- ajax 跨域 headers JavaScript ajax 跨域请求 +设置headers 实践
解决跨域调用服务并设置headers 主要的解决方法需要通过服务器端设置响应头.正确响应options请求,正确设置 JavaScript端需要设置的headers信息 方能实现. 此处手札 供后人参 ...
- 【转】ajax 跨域 headers JavaScript ajax 跨域请求 +设置headers 实践
解决跨域调用服务并设置headers 主要的解决方法需要通过服务器端设置响应头.正确响应options请求,正确设置 JavaScript端需要设置的headers信息 方能实现. 此处手札 供后人参 ...
- 由浅入深学习ajax跨域(JSONP)问题
什么是跨域?说直白点就是获取别人网站上的内容.但这么说貌似又有点混淆,因为通常我们用ajax+php就可以获取别人网站的内容,来看下面这个例子. 来看看跨域的例子,jquery+ajax是不能跨域请求 ...
- jQuery $.ajax跨域-JSONP获取JSON数据(转载)
Asynchronous JavaScript and XML (Ajax ) 是驱动新一代 Web 站点(流行术语为 Web 2.0 站点)的关键技术.Ajax 允许在不干扰 Web 应用程序的显示 ...
- ajax跨域jsonp
<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8&qu ...
- Ajax 跨域,这应该是最全的解决方案了
https://segmentfault.com/a/1190000012469713 前言 从刚接触前端开发起,跨域这个词就一直以很高的频率在身边重复出现,一直到现在,已经调试过N个跨域相关的问题了 ...
随机推荐
- Kotlin的高阶函数和常用高阶函数
Kotlin的高阶函数和常用高阶函数 文章来源:企鹅号 - Android先生 高阶函数的定义 将函数当做参数或者是返回值的函数 什么是高阶函数 可以看看我们常用的 函数: 首先我们可以知道, 是 的 ...
- C++入门经典-例2.8-输出整数,控制打印格式
1:代码如下: // 2.8.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #incl ...
- JAVA_OPT理解及调优理论
以RocketMQ的namesrv和broker启动为例,理解CMS和G1垃圾收集器下的jdk参数 CMS垃圾收集器 以RocketMQ中runserver.cmd为例,这是启动NameSrv的命令行 ...
- 【转】Java压缩和解压文件工具类ZipUtil
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- ruby_类的调用及require的使用
在文件arrayTest_1中,定义class Liuyang内容如下:(通过require File.expand_path('../arrayTest_2',__FILE__) 来包含其他文件的文 ...
- CentOS 6.4 搭建 ntop 网络流量监控分析平台
[前言] Ntop是一种监控网络流量工具,用ntop显示网络的使用情况比其他一些网络管理软件更加直观.详细.Ntop甚至可以列出每个节点计算机的网络带宽利用率. 功能: 自动从网络中识别有用的信息: ...
- RF Setup和Teardown的使用
执行顺序 setup执行顺序是:project级别setup>suite级别setup>case级别setup 无返回值 Run Keywords | [KW1 | arg1 | arg2 ...
- Android Studio在Make Project时下载Grandle特别慢
SDK下载完成了,建个工程, 又蒙了: Server returned HTTP response code: 502 for URL: https://services.gradle.org/dis ...
- kafka代码测试连接
1.发送: package kafka.test; import java.util.Date;import java.util.Properties;import java.util.Random; ...
- HCL试验3
PC端配置:配置ip地址 配置网关 交换机(左)配置:①创建VLAN system-view vlan 10 vlan 20 ②配置PC端接口 interface gi 1/0/1 port link ...