通过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 插件开发 extjs中的extend用法小结
Jan 04 Javascript
使用JavaScript构建JSON格式字符串实现步骤
Mar 22 Javascript
jQuery的bind()方法使用详解
Jul 15 Javascript
jQuery+css3实现Ajax点击后动态删除功能的方法
Aug 10 Javascript
理解 JavaScript Scoping &amp; Hoisting(二)
Nov 18 Javascript
使用Vue.js创建一个时间跟踪的单页应用
Nov 28 Javascript
jQuery展示表格点击变色、全选、删除
Jan 05 Javascript
如何在vue里添加好看的lottie动画
Aug 02 Javascript
你可能不知道的CORS跨域资源共享
Mar 13 Javascript
bootstrap datepicker的基本使用教程
Jul 09 Javascript
Vue 使用Props属性实现父子组件的动态传值详解
Nov 13 Javascript
es6 super关键字的理解与应用实例分析
Feb 15 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数据库链接类(PDO+Access)实例分享
2013/12/05 PHP
php汉字转拼音的示例
2014/02/27 PHP
php实现的网页版剪刀石头布游戏示例
2016/11/25 PHP
jquery如何把参数列严格转换成数组实现思路
2013/04/01 Javascript
js/jquery去掉空格,回车,换行示例代码
2013/11/05 Javascript
JS判断对象是否存在的10种方法总结
2013/12/23 Javascript
查询json的数据结构的8种方式简介
2014/03/10 Javascript
jQuery实现图片轮播效果代码
2016/09/27 Javascript
jQuery Ajax传值到Servlet出现乱码问题的解决方法
2016/10/09 Javascript
JS实现类似51job上的地区选择效果示例
2016/11/17 Javascript
html+javascript+bootstrap实现层级多选框全层全选和多选功能
2017/03/09 Javascript
nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
2018/01/05 NodeJs
微信小程序实现换肤功能
2018/03/14 Javascript
vue devtools的安装与使用教程
2018/08/08 Javascript
Javascript通过控制类名更改样式
2019/05/24 Javascript
vue实现行列转换的一种方法
2019/08/06 Javascript
vue动态绘制四分之三圆环图效果
2019/09/03 Javascript
python读取csv文件示例(python操作csv)
2014/03/11 Python
python如何让类支持比较运算
2018/03/20 Python
Python多进程与服务器并发原理及用法实例分析
2018/08/21 Python
python实现nao机器人手臂动作控制
2019/04/29 Python
对python 中re.sub,replace(),strip()的区别详解
2019/07/22 Python
如何用Python来搭建一个简单的推荐系统
2019/08/07 Python
对django layer弹窗组件的使用详解
2019/08/31 Python
python调用c++返回带成员指针的类指针实例
2019/12/12 Python
解决TensorFlow训练内存不断增长,进程被杀死问题
2020/02/05 Python
使用CSS3实现多列布局与多背景的技巧
2016/02/29 HTML / CSS
HTML5 Canvas——用路径描画线条实例介绍
2013/06/09 HTML / CSS
诺心蛋糕官网:LE CAKE
2018/08/25 全球购物
德国健康生活方式网上商店:Landkaufhaus Mayer
2019/03/12 全球购物
Three Graces London官网:英国奢侈品牌
2021/03/18 全球购物
中西医专业毕业生职业规划书
2014/02/24 职场文书
社团活动总结书
2014/06/27 职场文书
个人典型事迹材料
2014/12/30 职场文书
2019西餐厅创业计划书范文!
2019/07/12 职场文书
MySQL数据库压缩版本安装与配置详细教程
2021/05/21 MySQL