通过jsonp获取json数据实现AJAX跨域请求


Posted in Javascript onJanuary 22, 2017

AJAX(异步的 JavaScript 和 XML)是用于创建快速动态网页的一种技术,它在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页,ajax 使用XMLHttpRequest对象在后台与服务器交换数据,XMLHttpRequest 是 AJAX 的基础,它允许客户端 JavaScript 通过 HTTP请求连接到远程服务器。

但是,由于受到浏览器的限制,这种方法不可以进行跨域访问,如果使用这种方法进行跨域访问则会出现安全问题。不过,我们可以发现,在web页面跨域调用 js文件时,不会受到浏览器的限制,所以我们可以利用将远程服务器端的数据装入js格式的文件,然后再用来供客户端进行调用。

JSON(JavaScript 对象表示法)是一种轻量级的文本数据交换格式,它具有自我描述性,易于理解。JSON 可通过 JavaScript 进行解析,JSON 数据可使用 AJAX 进行传输。

JSON实例:

{
 "employees": [
 { "firstName":"Bill" , "lastName":"Gates" },
 { "firstName":"George" , "lastName":"Bush" },
 { "firstName":"Thomas" , "lastName":"Carter" }
 ]
 }

JSON 语法是 JavaScript 对象表示法语法的子集:

数据在名称/值对中, 数据由逗号分隔 ,花括号保存对象, 方括号保存数组

JSON的特性

  • 纯文本,易于跨平台传递
  • Javascript原生支持,后台语言几乎全部支持
  • 使用轻量级的文本数据交换格式,适合在互联网中传递
  • 比 XML 更小、更快,更易解析。

基于JSON的这些特性,可以通过使服务器动态生成JSON文件,然后将客户端需要的数据装入这个文件,再将该文件调回客户端供客户端使用。为了便于客户端使用数据,逐渐形成了一种非正式传输协议JSONP,该协议的一个要点就是允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来装入JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。

如何使用JSONP

一种简单的方式就是使用jQuery来实现:

<!DOCTYPE html>
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
 <title>test</title>
 <script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.js"></script>
  <script type="text/javascript">
  $(document).ready(function(){ 
   
  $.ajax({
    type: "get",
    async: false,
    url: "http://encounter.christmas023.space/json.php?name=mavis&age=18",
    dataType: "jsonp",
    jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)
    jsonpCallback:"message",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据
    success: function(json){
     alert('你的名字:' + json.name + ' 年龄: ' + json.age);
     
    },
    error: function(){
     alert('fail');
    }
   });
 
  });
  </script>
</head>
<body>

</body>
</html>
  • type:请求类型,GET 或 POST,默认为 GET;
  • async:true(异步)或 false(同步),默认情况下为true,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行;
  • url:发送请求的地址(跨域请求时应为绝对地址);
  • dataType:指定服务器返回的数据类型;
  • jsonpCallback:自定义JSONP回调函数名称;
  • success:请求成功后回调函数;
  • error:请求失败时调用此方法。

运行结果:

通过jsonp获取json数据实现AJAX跨域请求

服务器返回的数据类型:

通过jsonp获取json数据实现AJAX跨域请求

返回一个指定函数名为message的回调函数,函数里面包裹的数据为JSON格式。

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

Javascript 相关文章推荐
Jquery+CSS3实现一款简洁大气带滑动效果的弹出层
May 15 Javascript
15条JavaScript最佳实践小结
Aug 09 Javascript
js实现将选中内容分享到新浪或腾讯微博
Dec 16 Javascript
原生js页面滚动延迟加载图片
Dec 20 Javascript
原生 JS Ajax,GET和POST 请求实例代码
Jun 08 Javascript
javascript中this关键字详解
Dec 12 Javascript
使用3D引擎threeJS实现星空粒子移动效果
Sep 13 Javascript
Vue-cli配置打包文件本地使用的教程图解
Aug 02 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
May 30 jQuery
vue-froala-wysiwyg 富文本编辑器功能
Sep 19 Javascript
20多个小事例带你重温ES10新特性(小结)
Sep 29 Javascript
使用axios请求时,发送formData请求的示例
Oct 29 Javascript
JS实现点击表头表格自动排序(含数字、字符串、日期)
Jan 22 #Javascript
node.js基于mongodb的搜索分页示例
Jan 22 #Javascript
利用JS实现文字的聚合动画效果
Jan 22 #Javascript
angularJS 指令封装回到顶部示例详解
Jan 22 #Javascript
jQuery实现的分页功能示例
Jan 22 #Javascript
jQuery加载及解析XML文件的方法实例分析
Jan 22 #Javascript
原生js实现类似fullpage的单页/全屏滚动
Jan 22 #Javascript
You might like
PHP 输出URL的快捷方式示例代码
2013/09/22 PHP
PHP将XML转数组过程详解
2013/11/13 PHP
php+html5使用FormData对象提交表单及上传图片的方法
2015/02/11 PHP
Nginx下配置codeigniter框架方法
2015/04/07 PHP
Yii2 输出xml格式数据的方法
2016/05/03 PHP
PHP正则+Snoopy抓取框架实现的抓取淘宝店信誉功能实例
2017/05/17 PHP
javascript数组去掉重复
2011/05/12 Javascript
基于jquery自己写tab滑动门(通用版)
2012/10/30 Javascript
javascript错误的认识不用关心内存管理
2012/12/15 Javascript
JavaScript模拟深蓝vs卡斯帕罗夫的国际象棋对局示例
2015/04/22 Javascript
浅析JavaScript动画
2015/06/10 Javascript
解决wx.onMenuShareTimeline出现的问题
2016/08/16 Javascript
js 判断各种数据类型的简单方法(推荐)
2016/08/29 Javascript
jquery dialog获取焦点的方法
2017/02/09 Javascript
Node.js对MongoDB数据库实现模糊查询的方法
2017/05/03 Javascript
微信小程序实现留言板功能
2018/11/02 Javascript
编写更好的JavaScript条件式和匹配条件的技巧(小结)
2019/06/27 Javascript
Vue.js自定义指令学习使用详解
2019/10/19 Javascript
解决VUEX的mapState/...mapState等取值问题
2020/07/24 Javascript
vue抽出组件并传值实例
2020/07/31 Javascript
基于Vue.js+Nuxt开发自定义弹出层组件
2020/10/09 Javascript
python通过exifread模块获得图片exif信息的方法
2015/03/16 Python
python+Django+apache的配置方法详解
2016/06/01 Python
浅谈python socket函数中,send与sendall的区别与使用方法
2017/05/09 Python
Python延时操作实现方法示例
2018/08/14 Python
python使用matplotlib绘制雷达图
2019/10/18 Python
详解Python IO口多路复用
2020/06/17 Python
Python操作word文档插入图片和表格的实例演示
2020/10/25 Python
英国剑桥包官网:The Cambridge Satchel Company
2016/08/01 全球购物
蒂芙尼澳大利亚官方网站:Tiffany&Co. Australia
2017/08/27 全球购物
澳大利亚珍珠首饰购物网站:Vayo Pearls
2019/03/11 全球购物
建龙钢铁面试总结
2014/04/15 面试题
优秀食品类广告词
2014/03/19 职场文书
小学生交通安全寄语
2015/02/27 职场文书
留学推荐信怎么写
2015/03/26 职场文书
HDFS免重启挂载新磁盘
2022/04/06 Servers