通过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 相关文章推荐
一个用js实现控制台控件的代码
Sep 04 Javascript
JS使用oumousemove和oumouseout动态改变图片显示的方法
Mar 31 Javascript
jQuery EasyUI datagrid在翻页以后仍能记录被选中行的实现代码
Aug 15 Javascript
Bootstrap table 定制提示语的加载过程
Feb 20 Javascript
详解JavaScript中return的用法
May 08 Javascript
jQuery 开发之EasyUI 添加数据的实例
Sep 26 jQuery
详解基于Vue cli生成的Vue项目的webpack4升级
Jun 19 Javascript
5分钟学会Vue动画效果(小结)
Jul 21 Javascript
解决vue select当前value没有更新到vue对象属性的问题
Aug 30 Javascript
angularJs在多个控制器中共享服务数据的方法
Sep 30 Javascript
Vue的Options用法说明
Aug 14 Javascript
微信小程序基于高德地图API实现天气组件(动态效果)
Oct 22 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
基于xcache的配置与使用详解
2013/06/18 PHP
关于php循环跳出的问题
2013/07/01 PHP
php利用事务处理转账问题
2015/04/22 PHP
php 把数字转换成汉字的代码
2015/07/21 PHP
PHP基于phpqrcode类生成二维码的方法详解
2018/03/14 PHP
JavaScript实现x秒后自动跳转到一个页面
2013/01/03 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
2015/09/10 Javascript
jQuery 获取多选框的值及多选框中文的函数
2016/05/16 Javascript
浅述节点的创建及常见功能的实现
2016/12/15 Javascript
jQuery使用EasyUi实现三级联动下拉框效果
2017/03/08 Javascript
javascript使用btoa和atob来进行Base64转码和解码
2017/03/20 Javascript
AngularJS点击添加样式、点击变色设置的实例代码
2017/07/27 Javascript
input输入框内容实时监测(附代码)
2017/08/15 Javascript
mongoose设置unique不生效问题的解决及如何移除unique的限制
2017/11/07 Javascript
用 Vue.js 递归组件实现可折叠的树形菜单(demo)
2017/12/25 Javascript
Vue中this.$router.push参数获取方法
2018/02/27 Javascript
Koa项目搭建过程详细记录
2018/04/12 Javascript
layui实现form表单同时提交数据和文件的代码
2019/10/25 Javascript
JS实现简单打字测试
2020/06/24 Javascript
JavaScript前端开发时数值运算的小技巧
2020/07/28 Javascript
python多进程中的内存复制(实例讲解)
2018/01/05 Python
python实现求最长回文子串长度
2018/01/22 Python
python实现画圆功能
2018/01/25 Python
在tensorflow中实现去除不足一个batch的数据
2020/01/20 Python
Django中F函数的使用示例代码详解
2020/07/06 Python
Django+Django-Celery+Celery的整合实战
2021/01/20 Python
利用Python实现最小二乘法与梯度下降算法
2021/02/21 Python
HTML5地理定位实例
2014/10/15 HTML / CSS
阿里巴巴英国:Alibaba英国
2019/12/11 全球购物
Yahoo-PHP面试题2
2014/12/06 面试题
宝信软件JAVA工程师面试经历
2012/08/19 面试题
进步之星获奖感言
2014/02/22 职场文书
会计演讲稿范文
2014/05/23 职场文书
关于感恩的演讲稿400字
2014/08/26 职场文书
党委书记群众路线对照检查材料思想汇报
2014/10/04 职场文书
工作收入住址证明
2014/10/28 职场文书