通过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 URL参数读取改进版
Jan 16 Javascript
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
Feb 27 Javascript
中文字符串截取的js函数代码
Apr 17 Javascript
JavaScript中的值类型详细介绍
Dec 29 Javascript
jquery实现勾选复选框触发事件给input赋值
Feb 01 Javascript
JavaScript使用setInterval()函数实现简单轮询操作的方法
Feb 02 Javascript
js和jQuery设置Opacity半透明 兼容IE6
May 24 Javascript
json定义及jquery操作json的方法
Sep 29 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
Oct 03 Javascript
React-Router如何进行页面权限管理的方法
Dec 06 Javascript
layui-laydate时间日历控件使用方法详解
Nov 15 Javascript
js核心基础之构造函数constructor用法实例分析
May 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
php通过array_shift()函数移除数组第一个元素的方法
2015/03/18 PHP
PHP explode()函数用法讲解
2019/02/15 PHP
初学prototype,发个JS接受URL参数的代码
2006/09/25 Javascript
JQUERY对单选框(radio)操作的小例子
2013/04/25 Javascript
nodejs的10个性能优化技巧
2014/07/15 NodeJs
jquery实现增加删除行的方法
2015/02/03 Javascript
JS实现判断碰撞的方法
2015/02/11 Javascript
Sortable.js拖拽排序使用方法解析
2016/11/04 Javascript
Nodejs调用WebService的示例代码
2017/09/29 NodeJs
js单线程的本质 Event Loop解析
2019/10/29 Javascript
javascript使用Blob对象实现的下载文件操作示例
2020/04/18 Javascript
Vue 电商后台管理项目阶段性总结(推荐)
2020/08/22 Javascript
[01:32]完美世界DOTA2联赛10月29日精彩集锦
2020/10/30 DOTA
Windows中安装使用Virtualenv来创建独立Python环境
2016/05/31 Python
使用python实现http及ftp服务进行数据传输的方法
2018/10/26 Python
Python获取航线信息并且制作成图的讲解
2019/01/03 Python
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
2019/02/13 Python
python pip源配置,pip配置文件存放位置的方法
2019/07/12 Python
python 用所有标点符号分隔句子的示例
2019/07/15 Python
Django 简单实现分页与搜索功能的示例代码
2019/11/07 Python
Tensorflow 1.0之后模型文件、权重数值的读取方式
2020/02/12 Python
Django Haystack 全文检索与关键词高亮的实现
2020/02/17 Python
原装进口全世界:天猫国际
2016/08/03 全球购物
巴西电子产品购物网站:Saldão da Informática
2018/01/09 全球购物
viagogo波兰票务平台:演唱会、体育比赛、戏剧门票
2018/04/23 全球购物
Otiumberg官网:英国半精致珠宝品牌
2021/01/16 全球购物
什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
2013/07/26 面试题
说一下Linux下有关用户和组管理的命令
2014/08/18 面试题
医院2014国庆节活动策划方案
2014/09/21 职场文书
高中开学感言
2015/08/01 职场文书
百年校庆宣传标语口号
2015/12/26 职场文书
2016会计专业自荐信范文
2016/01/28 职场文书
2016年幼儿园教师师德承诺书
2016/03/25 职场文书
教你怎么用Python实现多路径迷宫
2021/04/29 Python
快速学习Oracle触发器和游标
2021/06/30 Oracle
JavaScript实现音乐播放器
2022/08/14 Javascript