同源

  • 基本概念:同源策略是浏览器的一种安全策略,所谓同源是指,域名,协议,端口完全相同。
//同一域名下,允许通讯
http://www.a.com/a.js
http://www.a.com/b.js
//同一域名下不同文件夹,允许通讯
http://www.a.com/lab/a.js
http://www.a.com/script/b.js
//同一域名,不同端口,不允许
http://www.a.com:8000/a.js
http://www.a.com/b.js
//同一域名,不同协议,不允许
http://www.a.com/a.js
https://www.a.com/b.js
//域名和域名对应ip,不允许
http://www.a.com/a.js
http://70.32.92.74/b.js
//主域相同,子域不同,不允许
http://www.a.com/a.js
http://script.a.com/b.js
//同一域名,不同二级域名(同上),不允许
http://www.a.com/a.js
http://a.com/b.js
//不同域名,不允许
http://www.cnblogs.com/a.js
http://www.a.com/b.js

跨域

  • 跨域是十分危险的
  • iframe标签src属性可以获取外部网站的dom对象
  • 跨域又可以被利用,从别的网站接收一些十分有用的数据
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
body{
background-color: yellow;
}
</style>
</head>
<body>
<h1>我是内部</h1>
<input type="text" value="123">
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
body {
background-color: green;
}
</style>
</head>
<body>
<h1>我是外部</h1>
<iframe src="15-inner.html"></iframe>
<script>
var iframe = document.querySelector('iframe');
var innerDocument = iframe.contentWindow.document;
console.log(innerDocument);
</script>
</body>
</html>

核心思想

  • 因为浏览器禁止跨域访问,但是可以通过src属性进行跨域
  • 在script标签的src属性中添加一个js文件地址,可以实现跨域,但是是写死的
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <!--应该是域名加...全路径,如果要跨域访问的话-->
<script src="js/myjs.js"></script>
</body>
</html>
//myjs.js
function say(str) {
alert(str);
} say('hello');
  • 在script标签的scr属性中添加一个php地址,页面加载会自动发送一个get请求,这就写活了
  • 取数据:服务端获取get请求传递的参数,然后再返回回去,并且再利用字符串拼接把json数据传递过去,这时候是一个函数名+实参的形式传递给了页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
function say(data) {
console.log(data);
console.log(data.name);//wq
console.log(data.age);//17
}
</script>
<!--发送了一个get请求-->
<script src="files/07.php?callback=say"></script> </body>
</html>
<?php
$str='{name:"wq",age:17}';
echo $_GET['callback'].'('.$str.')';
?>
  • jquery中异步方法已经帮我们封装好了一个jsonpCallback,可以将callback=jsonpCallback拼接到url中,post除外
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title> </head>
<body>
<input type="button" value="ajax发送jsonp">
<script src="js/jquery.min.js"></script>
<script>
function say(data) {
console.log(data);
} $(function () {
$('input').click(function () {
$.ajax({
url: 'files/08.php',
dataType: 'jsonp',
type:'post',
success: function (data) {
console.log(data);
},
jsonpCallback: 'say'
});
});
});
</script>
</body>
</html>
<?php
$str='{name:"wq",age:17}';
echo $_GET['callback'].'('.$str.')';
?>
//{name: "wq", age: 17}
//{name: "wq", age: 17}

返回两行数据,可以发现,jsonpCallback参数是say,有一个就是调用了say方法,一个是success成功以后打印的传输数据

Ajax——跨域访问的更多相关文章

  1. 浅析JSONP-解决Ajax跨域访问问题

    浅析JSONP-解决Ajax跨域访问问题 很久没有写随笔了,总是感觉没时间,其实时间就是...废话少说,前几天,工作上有一新需求,需要前端web页面异步调用后台的Webservice方法返回信息.实现 ...

  2. ajax跨域访问的解决方案

    今天的工作中要访问摄像机内部的一个web站点,这就涉及到jquery的ajax跨域访问的问题.我使用的是jquery1.7的版本,下面总结如下: 问题一:一开始用IE调试,总是返回No Transpo ...

  3. Ajax跨域访问解决办法

    方法1. jsonp实现ajax跨域访问示例 jsp代码: <body> <input type="button" onclick="testJsonp ...

  4. Web Api 2(Cors)Ajax跨域访问

    支持Ajax跨域访问ASP.NET Web Api 2(Cors)的简单示例教程演示   随着深入使用ASP.NET Web Api,我们可能会在项目中考虑将前端的业务分得更细.比如前端项目使用Ang ...

  5. ajax 跨域访问的解决方案

    ajax 跨域访问的解决方案 一.什么是跨域: 1.什么样的请求属于跨域: 域名,端口有任何一个不相同都属于跨域: 二.跨域的常用几种解决方案: 1.jsonp: 2.iframe: 3.webcon ...

  6. Hbuilder编辑App时,ajax跨域访问失败问题

    今天试着用Hbuilder写app的前段显示页面,在第一步时就被打住了,ajax异步调用服务器的登录接口时,报错, 显示这样的错误 XMLHttpRequest cannot loadhttp://w ...

  7. 关于JQuery Ajax 跨域 访问.net WebService

    关于这个 jQuery Ajax跨域访问 WebService 前天整了好几个小时没整明白 今天再看一下 结果突然就顿悟了 1.建一个空webApplication --添加--新建项--web服务( ...

  8. JS Ajax跨域访问

    js ajax跨域访问报"No 'Access-Control-Allow-Origin' header is present on the requested resource 如果请求的 ...

  9. ajax跨域访问http服务--jsonp

    在前面一篇文章<Spring Cloud 前后端分离后引起的跨域访问解决方案>里我们提到使用ajax跨域请求其他应用的http服务,使用的是后台增加注解@CrossOrigin或者增加Co ...

  10. Ajax跨域访问wcf服务中所遇到的问题总结。

    工具说明:vs2012,sql server 2008R2 1.首先,通过vs2012建立一个wcf服务项目,建立好之后.再新开一个vs2012 建立web项目,通过jQuery的ajax方法访问服务 ...

随机推荐

  1. 印象笔记再WIN10同步失败解决方法

    IE11不支持tls1.1导致印象笔记安全性失效 打开组策略,关闭IE的加密策略就可以同步了

  2. 洛谷—— P2176 [USACO14FEB]路障Roadblock

    https://www.luogu.org/problem/show?pid=2176 题目描述 每天早晨,FJ从家中穿过农场走到牛棚.农场由 N 块农田组成,农田通过 M 条双向道路连接,每条路有一 ...

  3. HTTP自学心得

    HTTP是一个 客户端和 服务器端请求和应答的标准(TCP).HTTP是客户端浏览器或其他程序与 Web服务器之间的应用层通信协议. HTTP一般指超文本传输协议,它是互联网应用最广泛的协议,是用于从 ...

  4. 2102 石子归并 2codevs

    2102 石子归并 2codevs 题目描述 Description 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为 ...

  5. 6、Java并发性和多线程-并发性与并行性

    以下内容转自http://tutorials.jenkov.com/java-concurrency/concurrency-vs-parallelism.html(使用谷歌翻译): 术语并发和并行性 ...

  6. pga_aggregate_target, sga_target, memory_target

    对于这三个参数有一些了解,但是又有一些疑惑. pga_aggregate_target 最初的了解: 这个参数控制着PGA的大小,如果work_area_policy 设置成auto,则oracle采 ...

  7. iOS xmpp协议实现聊天之openfire的服务端配置(二)

    本篇主要说一下怎样利用命令行来正确配置MySql. 首先打开终端: 1.为mysql起一个别名 alias mysql=/usr/local/mysql/bin/mysql 2.创建mysql的管理员 ...

  8. 一款炫酷Loading动画--载入失败

    简单介绍 上一篇文章一款炫酷Loading动画–载入成功.给大家介绍了成功动画的绘制过程,这篇文章将接着介绍载入失败特效的制作. 相比成功动画,有了前面的经验,失败动画的过程就显得比較简单了. 动画结 ...

  9. php 把一个数组分成有n个元素的二维数组的算法

    一.第一种解法 <?php //把一个数组分成几个数组 //$arr 是数组 //$num 是数组的个数 function partition($arr,$num){ //数组的个数 $list ...

  10. USACO zerosum DFS 1A

    USER: Kevin Samuel [kevin_s1] TASK: zerosum LANG: C++ Compiling... Compile: OK Executing... Test 1: ...