通过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 相关文章推荐
dess中一个简单的多路委托的实现
Jul 20 Javascript
jquery 插件学习(二)
Aug 06 Javascript
javascript中typeof的使用示例
Dec 19 Javascript
javascript递归回溯法解八皇后问题
Apr 22 Javascript
js库Modernizr的介绍和使用
May 07 Javascript
获取阴历(农历)和当前日期的js代码
Feb 15 Javascript
基于d3.js实现实时刷新的折线图
Aug 03 Javascript
JavaScript事件方法(实例讲解)
Jun 27 Javascript
在 React、Vue项目中使用SVG的方法
Feb 09 Javascript
在NPM发布自己造的轮子的方法步骤
Mar 09 Javascript
在Vue项目中使用snapshot测试的具体使用
Apr 16 Javascript
关于vue2强制刷新,解决页面不会重新渲染的问题
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中使用session防止用户非法登录后台的方法
2015/01/27 PHP
php多次include后导致全局变量global失效的解决方法
2015/02/28 PHP
php单文件版在线代码编辑器
2015/03/12 PHP
YII框架常用技巧总结
2019/04/27 PHP
PHP之header函数详解
2021/03/02 PHP
对象特征检测法判断浏览器对javascript对象的支持
2009/07/25 Javascript
js word表格动态添加代码
2010/06/07 Javascript
js用Date对象处理时间实现思路及代码
2013/01/31 Javascript
javascript实现在某个元素上阻止鼠标右键事件的方法和实例
2014/08/12 Javascript
jQuery实现本地预览上传图片功能
2016/01/08 Javascript
jquery获取复选框checkbox的值的简单实现方法
2016/05/26 Javascript
Bootstrap实现弹性搜索框
2016/07/11 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图和饼图的组合图效果示例【附demo源码下载】
2017/03/09 Javascript
node.js实现登录注册页面
2017/04/08 Javascript
jQuery扇形定时器插件pietimer使用方法详解
2017/07/18 jQuery
JS传播事件、取消事件默认行为、阻止事件传播详解
2017/08/14 Javascript
node.js多个异步过程中判断执行是否完成的解决方案
2017/12/10 Javascript
微信小程序中上传图片并进行压缩的实现代码
2018/08/28 Javascript
vue自定义正在加载动画的例子
2019/11/14 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
2020/05/27 Javascript
Python写的一个简单监控系统
2015/06/19 Python
python实现微信远程控制电脑
2018/02/22 Python
对Python字符串中的换行符和制表符介绍
2018/05/03 Python
python中将zip压缩包转为gz.tar的方法
2018/10/18 Python
python实现大学人员管理系统
2019/10/25 Python
Python如何存储数据到json文件
2020/03/09 Python
python pymysql链接数据库查询结果转为Dataframe实例
2020/06/05 Python
详解Python中Pyyaml模块的使用
2020/10/08 Python
基于HTML5的WebGL经典3D虚拟机房漫游动画
2017/11/15 HTML / CSS
canvas实现按住鼠标移动绘制出轨迹的示例代码
2018/02/05 HTML / CSS
Delphi笔试题
2016/11/14 面试题
《再见了,亲人》教学反思
2014/02/26 职场文书
前台文员职责范本
2014/03/07 职场文书
超市优秀员工获奖感言
2014/08/15 职场文书
2014年学习厉行节约反对浪费思想汇报
2014/09/10 职场文书
乡镇计划生育工作汇报
2014/10/28 职场文书