通过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切换div css注意的细节
Dec 10 Javascript
JQuery写动态树示例代码
Jul 31 Javascript
HTML Color Picker(js拾色器效果)
Aug 27 Javascript
分享jQuery网页元素拖拽插件
Dec 01 Javascript
Vue关于数据绑定出错解决办法
May 15 Javascript
jQuery简介_动力节点Java学院整理
Jul 04 jQuery
微信小程序基于slider组件动态修改标签透明度的方法示例
Dec 04 Javascript
JavaScript中构造函数与原型链之间的关系详解
Feb 25 Javascript
基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能
Apr 02 Javascript
详解JavaScript的内存空间、赋值和深浅拷贝
Apr 17 Javascript
在VUE中使用lodash的debounce和throttle操作
Nov 09 Javascript
微信小程序实现下拉加载更多商品
Dec 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做下载文件的实现代码及文件名中乱码解决方法
2011/02/03 PHP
PHP程序员常见的40个陋习,你中了几个?
2014/11/20 PHP
变量在 PHP7 内部的实现(二)
2015/12/21 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
2016/05/27 PHP
[原创]smarty简单模板变量输出方法
2016/07/09 PHP
php使用imagecopymerge()函数创建半透明水印
2018/01/25 PHP
JavaScript触发器详解
2007/03/10 Javascript
Javascript中Eval函数的使用
2010/03/23 Javascript
变量声明时命名与变量作为对象属性时命名的区别解析
2013/12/06 Javascript
jquery实现将获取的颜色值转换为十六进制形式的方法
2014/12/20 Javascript
js正则表达式中exec用法实例
2015/07/23 Javascript
JavaScript精炼之构造函数 Constructor及Constructor属性详解
2015/11/05 Javascript
jquery实现全选和全不选功能效果的实现代码【推荐】
2016/05/05 Javascript
浅析JavaScript中作用域和作用域链
2016/12/06 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
2016/12/17 Javascript
微信小程序开发(二)图片上传+服务端接收详解
2017/01/11 Javascript
详解在 Angular 项目中添加 clean-blog 模板
2017/07/04 Javascript
Angular使用动态加载组件方法实现Dialog的示例
2018/05/11 Javascript
深入理解vue-class-component源码阅读
2019/02/18 Javascript
layer提示框添加多个按钮选择的实例
2019/09/12 Javascript
jstree中的checkbox默认选中和隐藏示例代码
2019/12/29 Javascript
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
2020/04/25 Javascript
[51:06]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS Liquid
2018/03/30 DOTA
Python获取Linux系统下的本机IP地址代码分享
2014/11/07 Python
python实现微信跳一跳辅助工具步骤详解
2018/01/04 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
2018/05/21 Python
新手如何发布Python项目开源包过程详解
2019/07/11 Python
Python中import导入不同目录的模块方法详解
2020/02/18 Python
阿拉伯世界最大的电子卖场:Souq埃及
2016/08/01 全球购物
在校学生职业规划范文
2014/01/08 职场文书
岗位明星事迹材料
2014/05/18 职场文书
元旦联欢会策划方案
2014/06/11 职场文书
商务经理岗位职责
2014/08/03 职场文书
教师学习心得体会范文
2016/01/21 职场文书
年终工作总结范文
2019/06/20 职场文书
Nebula Graph解决风控业务实践
2022/03/31 MySQL