通过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的跨域传输数据(JSONP)
Mar 10 Javascript
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
Apr 16 Javascript
JS实现在页面随时自定义背景颜色的方法
Feb 27 Javascript
jQuery实现的指纹扫描效果实例(附演示与demo源码下载)
Jan 26 Javascript
深入浅析knockout源码分析之订阅
Jul 12 Javascript
javascript实现图片左右滚动效果【可自动滚动,有左右按钮】
Sep 19 Javascript
基于jQuery和Bootstrap框架实现仿知乎前端动态列表效果
Nov 09 Javascript
详解jQuery简单的表格应用
Dec 16 Javascript
angular.js 路由及页面传参示例
Feb 24 Javascript
vue 集成 vis-network 实现网络拓扑图的方法
Aug 07 Javascript
NestJs使用Mongoose对MongoDB操作的方法
Feb 22 Javascript
实现一个简单得数据响应系统
Nov 11 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
Discuz Uchome ajaxpost小技巧
2011/01/04 PHP
PHP写UltraEdit插件脚本实现方法
2011/12/26 PHP
php实现微信公众号无限群发
2015/10/11 PHP
PHP类的特性实例分析
2016/09/28 PHP
PHP使用curl函数发送Post请求的注意事项
2016/11/26 PHP
PHP+Ajax无刷新带进度条图片上传示例
2017/02/08 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
2018/06/16 PHP
javascript实现二分查找法实现代码
2007/11/12 Javascript
IE8 兼容性问题(属性名区分大小写)
2009/06/04 Javascript
jquery 多行文本框(textarea)高度变化
2013/07/03 Javascript
判定是否原生方法的JS代码
2013/11/12 Javascript
JS正则表达式获取分组内容的方法详解
2013/11/15 Javascript
如何使用HTML5地理位置定位功能
2015/04/27 Javascript
简单介绍JavaScript数据类型之隐式类型转换
2015/12/28 Javascript
Bootstrap表格和栅格分页实例详解
2016/05/20 Javascript
Javascript将字符串日期格式化为yyyy-mm-dd的方法
2016/10/27 Javascript
vuex的module模块用法示例
2018/11/12 Javascript
使用NestJS开发Node.js应用的方法
2018/12/03 Javascript
vue中如何添加百度统计代码
2020/12/19 Vue.js
Python批量修改文件后缀的方法
2014/01/26 Python
Python使用arrow库优雅地处理时间数据详解
2017/10/10 Python
Python2.7下安装Scrapy框架步骤教程
2017/12/22 Python
对python while循环和双重循环的实例详解
2019/08/23 Python
python 比较2张图片的相似度的方法示例
2019/12/18 Python
基于python监控程序是否关闭
2020/01/14 Python
Python3.7在anaconda里面使用IDLE编译器的步骤详解
2020/04/29 Python
快速了解Python开发环境Spyder
2020/06/29 Python
python如何实现word批量转HTML
2020/09/30 Python
海淘母婴商城:国际妈咪
2016/07/23 全球购物
2014年公务员退休工资改革方案
2014/10/01 职场文书
2015年母亲节活动总结
2015/02/10 职场文书
法院个人总结
2015/03/03 职场文书
房屋租赁意向书范本
2015/05/09 职场文书
教师节主持词开场白
2015/05/29 职场文书
后天观后感
2015/06/08 职场文书
python如何正确使用yield
2021/05/21 Python