通过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 相关文章推荐
JavaScript语法着色引擎(demo及打包文件下载)
Jun 13 Javascript
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
Feb 27 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
May 23 Javascript
在linux中使用包管理器安装node.js
Mar 13 Javascript
JavaScript模拟可展开、拖动与关闭的聊天窗口实例
May 12 Javascript
酷炫jQuery全屏3D焦点图动画效果
Mar 22 Javascript
BootStrap文件上传样式超好看【持续更新】
May 10 Javascript
详解如何在Vue里建立长按指令
Aug 20 Javascript
JavaScript变量提升和严格模式实例分析
Jan 27 Javascript
详解用JS添加和删除class类名
Mar 25 Javascript
浅谈Webpack4 Tree Shaking 终极优化指南
Nov 18 Javascript
JS Object构造函数之Object.freeze
Apr 28 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函数)
2006/10/09 PHP
JSON在PHP中的应用介绍
2012/09/08 PHP
eAccelerator的安装与使用详解
2013/06/13 PHP
学习php过程中的一些注意点的总结
2013/10/25 PHP
反射调用private方法实践(php、java)
2015/12/21 PHP
PHP中Trait及其应用详解
2017/02/14 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
2019/08/27 PHP
jQuery学习基础知识小结
2010/11/25 Javascript
JSON 数字排序多字段排序介绍
2013/09/18 Javascript
javascript禁止访客复制网页内容的实现代码
2015/08/05 Javascript
jquery密码强度校验
2015/12/02 Javascript
客户端验证用户名和密码的方法详解
2016/06/16 Javascript
Bootstrap表单控件使用方法详解
2017/01/11 Javascript
Ionic3 UI组件之autocomplete详解
2017/06/08 Javascript
十分钟带你快速了解React16新特性
2017/11/10 Javascript
关于 angularJS的一些用法
2017/11/29 Javascript
可能被忽略的一些JavaScript数组方法细节
2019/02/28 Javascript
原生js实现的金山打字小游戏(实例代码详解)
2020/03/16 Javascript
js 将多个对象合并成一个对象 assign方法的实现
2020/09/24 Javascript
python中使用xlrd、xlwt操作excel表格详解
2015/01/29 Python
Python之py2exe打包工具详解
2017/06/14 Python
Python算法之求n个节点不同二叉树个数
2017/10/27 Python
计算机二级python学习教程(3) python语言基本数据类型
2019/05/16 Python
aws 通过boto3 python脚本打pach的实现方法
2020/05/10 Python
HTML5制作酷炫音频播放器插件图文教程
2014/12/30 HTML / CSS
加拿大领先的时尚和体育零售商:Sporting Life
2019/12/15 全球购物
C语言面试题
2015/10/30 面试题
职业规划书如何设计?
2014/01/09 职场文书
幼儿园中班下学期评语
2014/04/18 职场文书
教师党员批评与自我批评发言稿
2014/10/15 职场文书
校本研修个人总结
2015/02/28 职场文书
2015年学生管理工作总结
2015/05/26 职场文书
职工培训工作总结
2015/08/10 职场文书
2016年公司新年寄语
2015/08/17 职场文书
Mysql中 unique列插入重复值该怎么解决呢
2021/05/26 MySQL
python opencv检测直线 cv2.HoughLinesP的实现
2021/06/18 Python