JavaScript如何实现跨域请求


Posted in Javascript onAugust 05, 2016

什么是跨域请求?
简单的理解就是向不在同一个域名的服务器文件发出请求。这个还是用实际的例子来说明一下吧,比如baidu.com向cxyblog.com发送请求,这两个域名是不同的,那么这就是跨域了,出于安全性的考虑,这样是不允许的。另外需要注意的是不同子域名或者同域名不同端口之间或者相同域名不同协议等发送的请求也都算是跨域的,基本上可以为归为下面几类:
(1)http://www.baidu.comhttp://www.cxyblog.com发送请求
(2)http://www.cxyblog.comhttp://image.cxyblog.com发送请求
(3)http://www.baidu.com:8000http://www.cxyblog.com发送请求
(4)http://www.cxyblog.comhttps://www.cxyblog.com发送请求
(5)http://www.cxyblog.comhttp://112.65.242.67发送请求(假设域名www.cxyblog.com所对应的IP是112.65.242.67)
以上五种情况都算是跨域请求。

什么时候会用到跨域请求?
有时候我们需要使用Javascript进行Ajax操作的时候会碰到这种跨域请求操作的问题。
为什么直接使用javascript不能实现跨域请求?
由于安全的原因,javacript同源策略的限制,浏览器不允许Javascript请求跨域的资源。
如何解决javascript不能实现跨域请求的问题?
本文用到的解决方法是使用FlyJSONP应用JSONP实现跨域请求。FlyJSONP是一个轻量级的JavaScript类库,也被称作JSON插件,压缩后总大小约为3KB,不需要其他框架的支撑。
FlyJSONP官网地址:http://alotaiba.github.com/FlyJSONP/
那么该如何使用FlyJSONP类库实现跨域请求呢? 

(1)首先要加载FlyJSONP的Javascript脚本,即:

<script language="javascript" src="http://www.cxyblog.com/flyjsonp.min.js"></script> 

(2)然后要初始化FlyJSONP的实例,参数debug可设置为true或false,即:FlyJSONP.init({debug: true}),这个参数的意思就是是否打开调试信息,参数值为true或者false; 

(3)接下里就是使用get方法或post方法请求数据了,具体实例代码如下:

//FlyJSONP实现跨域GET
function getData(){
 FlyJSONP.init({debug:true});//初始化FlyJSONP的实例,参数debug可设置为true或false
 FlyJSONP.get({
  url:'http://www.cxyblog.com/article.json',//目标请求的URL
  parameters:{//请求参数
   limit:5
  },
  success:function(data){//发送请求成功
   console.log(data);
  },
  error:function(errorMsg){//发送请求失败
   console.log(errorMsg);
  }
 });
}
//FlyJSONP实现跨域POST
function postData(){
 FlyJSONP.init({debug:true});//初始化FlyJSONP的实例,参数debug可设置为true或false
 FlyJSONP.post({
  url:'http://www.cxyblog.com/article/new',
  parameters:{
   username:'cxyblog',
   api_key:'123456',
   title:'FlyJSONP',
   description:'test'
  },
  success:function(data){
   alert(data);
  }
 });
}

注意:服务端输出给客户端时,输出的必须是json字符串,否则客户端无法接收。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js本身的局限性 别让javascript做太多事
Mar 23 Javascript
获取元素距离浏览器周边的位置的方法getBoundingClientRect
Apr 17 Javascript
javascript关于继承的用法汇总
Dec 20 Javascript
jQuery中last()方法用法实例
Jan 06 Javascript
js判断一个字符串是否包含一个子串的方法
Jan 26 Javascript
使用jquery实现仿百度自动补全特效
Jul 23 Javascript
JavaScript实现99乘法表及隔行变色实例代码
Feb 24 Javascript
浅析创建javascript对象的方法
May 13 Javascript
JavaScript中Promise的使用详解
Feb 26 Javascript
Vue Ajax跨域请求实例详解
Jun 20 Javascript
一个简单的node.js界面实现方法
Jun 01 Javascript
微信小程序静默登录的实现代码
Jan 08 Javascript
JavaScript数组操作函数汇总
Aug 05 #Javascript
Jquery获取当前城市的天气信息
Aug 05 #Javascript
JavaScript蒙板(model)功能的简单实现代码
Aug 04 #Javascript
Three.js学习之Lamber材质和Phong材质
Aug 04 #Javascript
基于JavaScript实现在新的tab页打开url
Aug 04 #Javascript
同步文本框内容JS代码实现
Aug 04 #Javascript
JS打印组合功能
Aug 04 #Javascript
You might like
php生成随机密码的几种方法
2011/01/17 PHP
PHP+MYSQL实现用户的增删改查
2015/03/24 PHP
Yii获取当前url和域名的方法
2015/06/08 PHP
php常量详细解析
2015/10/27 PHP
thinkphp多层MVC用法分析
2015/12/30 PHP
通过php动态传数据到highcharts
2017/04/05 PHP
Ubuntu上安装yaf扩展的方法
2018/01/29 PHP
PHP APP微信提现接口代码
2018/09/30 PHP
JQuery 无废话系列教程(一) jquery入门 [推荐]
2009/06/23 Javascript
邮箱下拉自动填充选择示例代码附图
2014/04/03 Javascript
JavaScript利用正则表达式去除日期中的“-”
2014/07/01 Javascript
第二次聊一聊JS require.js模块化工具的基础知识
2016/04/17 Javascript
vue.js入门教程之绑定class和style样式
2016/09/02 Javascript
NodeJS安装图文教程
2018/04/19 NodeJs
Vue安装浏览器开发工具的步骤详解
2019/05/12 Javascript
Layui数据表格判断编辑输入的值,是否为我需要的类型详解
2019/10/26 Javascript
浅谈Vue使用Elementui修改默认的最快方法
2020/12/05 Vue.js
[02:04]2016国际邀请赛中国区预选赛VG.R晋级之路
2016/07/01 DOTA
python 获取当天凌晨零点的时间戳方法
2018/05/22 Python
详解Python安装scrapy的正确姿势
2018/06/26 Python
Python设计模式之解释器模式原理与用法实例分析
2019/01/10 Python
python 表格打印代码实例解析
2019/10/12 Python
用python爬取历史天气数据的方法示例
2019/12/30 Python
CSS3中Animation属性的使用详解
2015/08/06 HTML / CSS
详解H5本地储存Web Storage
2017/07/03 HTML / CSS
Dr.Jart+美国官网:韩国药妆品牌
2019/01/18 全球购物
介绍一下Java的安全机制
2012/06/28 面试题
行政人员工作职责
2013/12/05 职场文书
春季运动会广播稿大全
2014/02/19 职场文书
安全生产承诺书范文
2014/05/22 职场文书
法人委托书范本
2014/09/15 职场文书
办公室务虚会发言材料
2014/10/20 职场文书
教师工作总结范文2014
2014/11/10 职场文书
小学体育课教学反思
2016/02/16 职场文书
Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题
2022/02/12 Redis
Golang 1.18 多模块Multi-Module工作区模式的新特性
2022/04/11 Golang