通过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.ui.draggable中文文档
Nov 24 Javascript
简短几句 通俗解释javascript的闭包
Jan 17 Javascript
JSONP 跨域共享信息
Aug 16 Javascript
jquery中append()与appendto()用法分析
Nov 14 Javascript
jquery插件jquery.dragscale.js实现拖拽改变元素大小的方法(附demo源码下载)
Feb 25 Javascript
下雪了 javascript实现雪花飞舞
Aug 02 Javascript
JS实现一个简单的日历
Feb 22 Javascript
AngualrJs清除定时器遇到的坑
Oct 13 Javascript
vue.js实现回到顶部动画效果
Jul 31 Javascript
JavaScript实现滑动门效果
Jan 18 Javascript
javascript实现前端input密码输入强度验证
Jun 24 Javascript
浅谈实现在线预览PDF的几种解决办法
Aug 10 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 无限级 SelectTree 类
2009/05/19 PHP
openPNE常用方法分享
2011/11/29 PHP
php+mysqli使用面向对象方式更新数据库实例
2015/01/29 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
2018/04/04 PHP
Javascript中的Split使用方法与技巧
2007/03/09 Javascript
使用jQuery实现dropdownlist的联动效果(sharepoint 2007)
2011/03/30 Javascript
js字符编码函数区别分析
2011/12/28 Javascript
js Array对象的扩展函数代码
2013/04/24 Javascript
ie中js创建checkbox默认选中问题探讨
2013/10/21 Javascript
动态加载脚本提升javascript性能
2014/02/24 Javascript
jQuery使用append在html元素后同时添加多项内容的方法
2015/03/26 Javascript
JavaScript 函数的执行过程
2016/05/09 Javascript
使用plupload自定义参数实现多文件上传
2016/07/19 Javascript
深入理解js generator数据类型
2016/08/16 Javascript
ReactNative页面跳转实例代码
2016/09/27 Javascript
Bootstrap选项卡动态切换效果
2016/11/28 Javascript
Vue-cropper 图片裁剪的基本原理及思路讲解
2018/04/17 Javascript
js判断浏览器的环境(pc端,移动端,还是微信浏览器)
2020/12/24 Javascript
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
浅析Python中的序列化存储的方法
2015/04/28 Python
Python 正则表达式入门(中级篇)
2016/12/07 Python
Python for循环与getitem的关系详解
2020/01/02 Python
pytorch 修改预训练model实例
2020/01/18 Python
Python如何实现在字符串里嵌入双引号或者单引号
2020/03/02 Python
什么是python的必选参数
2020/06/21 Python
利用python清除移动硬盘中的临时文件
2020/10/28 Python
CSS3的 fit-content实现水平居中
2017/09/07 HTML / CSS
canvas里面如何基于随机点绘制一个多边形的方法
2018/06/13 HTML / CSS
联想台湾官网:Lenovo TW
2018/05/09 全球购物
什么是java序列化,如何实现java序列化
2012/11/14 面试题
超市创业计划书
2014/04/24 职场文书
档案保密承诺书
2014/06/03 职场文书
车辆转让协议书
2014/09/24 职场文书
工作疏忽检讨书500字
2014/10/26 职场文书
测量JavaScript函数的性能各种方式对比
2021/04/27 Javascript
JavaScript的function函数详细介绍
2021/11/20 Javascript