通过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 相关文章推荐
cookie中的path与domain属性详解
Dec 18 Javascript
JavaScript使用循环和分割来替换和删除元素实例
Oct 13 Javascript
浅谈JavaScript中的String对象常用方法
Feb 25 Javascript
Js与Jq 获取页面元素值的方法和差异对比
Apr 30 Javascript
分享12个实用的jQuery代码片段
Mar 09 Javascript
使用PBFunc在Powerbuilder中支付宝当面付款功能
Oct 01 Javascript
BootStrap组件之进度条的基本用法
Jan 19 Javascript
js实现上下左右弹框划出效果
Mar 08 Javascript
解决ztree搜索中多级菜单展示不全问题
Jul 05 Javascript
js 事件的传播机制(实例讲解)
Jul 20 Javascript
Vue侦测相关api的实现方法
May 22 Javascript
react-router-dom 嵌套路由的实现
May 02 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中常见的mongodb查询操作
2013/06/20 PHP
php通过获取头信息判断图片类型的方法
2015/06/26 PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
2017/05/04 PHP
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
jQuery 浮动广告实现代码
2008/12/25 Javascript
ExtJs扩展之GroupPropertyGrid代码
2010/03/05 Javascript
jQuery UI 应用不同Theme的办法
2010/09/12 Javascript
js判断输入是否为数字的具体实例
2013/08/03 Javascript
jquery 按钮状态效果 正常、移上、按下
2013/08/12 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
解决Linux无法正常安装与卸载Node.js的方法
2018/01/19 Javascript
vuejs 动态添加input框的实例讲解
2018/08/24 Javascript
微信小程序支付前端源码
2018/08/29 Javascript
[01:15]《辉夜杯》北京网鱼队巡礼
2015/10/26 DOTA
Python3 入门教程 简单但比较不错
2009/11/29 Python
仅利用30行Python代码来展示X算法
2015/04/01 Python
详解详解Python中writelines()方法的使用
2015/05/25 Python
几行Python代码爬取3000+上市公司的信息
2019/01/24 Python
对python 自定义协议的方法详解
2019/02/13 Python
Python Matplotlib实现三维数据的散点图绘制
2019/03/19 Python
Python字符串格式化f-string多种功能实现
2020/05/07 Python
基于opencv实现简单画板功能
2020/08/02 Python
简单介绍HTML5中的文件导入
2015/05/08 HTML / CSS
美津浓美国官网:Mizuno美国
2018/08/07 全球购物
PHP如何与mysql建立链接
2013/05/05 面试题
关键字throw与throws的用法差异
2016/11/22 面试题
秋季婚礼证婚词
2014/01/11 职场文书
工作表现评语
2014/01/19 职场文书
工厂采购员岗位职责
2014/04/08 职场文书
个人工作保证书
2015/02/28 职场文书
关于远足的感想
2015/08/10 职场文书
SQL Server中交叉联接的用法详解
2021/04/22 SQL Server
超详细教你怎么升级Mysql的版本
2021/05/19 MySQL
nginx中封禁ip和允许内网ip访问的实现示例
2022/03/17 Servers
Spring依赖注入多种类型数据的示例代码
2022/03/31 Java/Android
SpringBoot项目部署到阿里云服务器的实现步骤
2022/06/28 Java/Android