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 相关文章推荐
探讨JavaScript中声明全局变量三种方式的异同
Dec 03 Javascript
千分位数字格式化(用逗号隔开 代码已做了修改 支持0-9位逗号隔开)的JS代码
Dec 05 Javascript
JavaScript实现添加、查找、删除元素
Jul 02 Javascript
Treegrid的动态加载实例代码
Apr 29 Javascript
详解JavaScript中的自定义事件编写
May 10 Javascript
js+html5实现canvas绘制网页时钟的方法
May 21 Javascript
Angularjs 创建可复用组件实例代码
Oct 09 Javascript
WEB开发之注册页面验证码倒计时代码的实现
Dec 15 Javascript
jQuery validate 验证radio实例
Mar 01 Javascript
解决Vue编译时写在style中的路径问题
Sep 21 Javascript
AngularJS实现的根据数量与单价计算总价功能示例
Dec 26 Javascript
vue 判断元素内容是否超过宽度的方式
Jul 29 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
全文搜索和替换
2006/10/09 PHP
用php获取远程图片并把它保存到本地的代码
2008/04/07 PHP
php实现在限定区域里自动调整字体大小的类实例
2015/04/02 PHP
CodeIgniter配置之config.php用法实例分析
2016/01/19 PHP
php单例模式的简单实现方法
2016/06/10 PHP
PHP批量获取网页中所有固定种子链接的方法
2016/11/18 PHP
几个常用的JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
2009/06/02 Javascript
JQuery.closest(),parent(),parents()寻找父结点
2012/02/17 Javascript
JS获取后台Cookies值的小例子
2013/03/04 Javascript
div拖拽插件——JQ.MoveBox.js(自制JQ插件)
2013/05/17 Javascript
jQuery避免$符和其他JS库冲突的方法对比
2014/02/20 Javascript
JQuery动画与特效实例分析
2015/02/02 Javascript
Jquery 1.9.1源码分析系列(十二)之筛选操作
2015/12/02 Javascript
JS使用eval()动态创建变量的方法
2016/06/03 Javascript
JavaScript事件学习小结(五)js中事件类型之鼠标事件
2016/06/09 Javascript
Angular Module声明和获取重载实例代码
2016/09/14 Javascript
使用jquery如何获取时间
2016/10/13 Javascript
React Native AsyncStorage本地存储工具类
2017/10/24 Javascript
JS控制只能输入数字并且最多允许小数点两位
2019/11/24 Javascript
采用python实现简单QQ单用户机器人的方法
2014/07/03 Python
python利用高阶函数实现剪枝函数
2018/03/20 Python
浅谈Series和DataFrame中的sort_index方法
2018/06/07 Python
python 实现视频流下载保存MP4的方法
2019/01/09 Python
python实现图片中文字分割效果
2019/07/22 Python
解决Tensorflow 内存泄露问题
2020/02/05 Python
Python flask框架端口失效解决方案
2020/06/04 Python
基于PyTorch的permute和reshape/view的区别介绍
2020/06/18 Python
django跳转页面传参的实现
2020/09/17 Python
Django解决frame拒绝问题的方法
2020/12/18 Python
Html5基于canvas实现电子签名并生成PDF文档
2020/12/07 HTML / CSS
卫校中专生个人自我评价
2013/09/19 职场文书
仓管员岗位责任制
2014/02/19 职场文书
团代会邀请函
2015/02/02 职场文书
千与千寻观后感
2015/06/04 职场文书
高中语文教学反思范文
2016/02/16 职场文书
vue.js Router中嵌套路由的实用示例
2021/06/27 Vue.js