栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > JavaScript

JSONP原理及应用实例详解

JavaScript 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JSONP原理及应用实例详解

JSONP 被用于跨域获取数据。在讲解它之前,先讲讲它与 JSON 之间的区别

什么是JSON?

JSON 是一种基于文本的数据交换方式,或者叫做数据描述格式。

其优点是:

1、基于纯文本,跨平台传递极其简单;

2、Javascript 原生支持,后台语言几乎全部支持;

3、轻量级数据格式,占用字符数量极少,特别适合互联网传递;

4、可读性较强,虽然比不上 XML 那么一目了然,但在合理的依次缩进之后还是很容易识别的;

5、容易编写和解析,当然前提是你要知道数据结构;

JSON 的缺点当然也有,跨域无法获取数据,而 JSONP 的出现正好弥补了这一缺陷

什么是JSONP?

JSONP 是一种依靠开发人员的聪明才智创造出的一种非官方跨域数据交互协议,其本质就是 js 文件。

JSONP的客户端具体实现

  • Web页面上调用js文件时不受是否跨域的影响(不仅如此,凡是拥有"src"这个属性的标签都拥有跨域的能力,比如
    // somejsonp.js
    localHandler({"result":"我是远程js带来的数据"});

    3.然后回到 jsonp 文件夹,输入命令node index.js后,用浏览器打开http://localhost:3000即可看到浏览器窗口弹出js文件中的result,也就是我们获取到了js的数据。这便是jsonp的基本原理。

    动态获取 JSONP 的数据,就是在页面中动态插入一段script标签,scr中包含路径及参数,这样后台可根据参数动态生成JS文件,涉及后台实现,这里不做过多阐述。

    JSONP 在 JQuery 中的具体实现

    jquery 中对于 jsonp 的封装也是基于以上原理,下面是基于 jquery 的代码

    修改index.html

    
    
    
     
     
     
     document
    
    
     
     
    
    
    

    jquery 动态生成script标签,并定义好方法。前提是jsonpCallback的方法名与引入的js文件方法名一致。

    重新刷新页面即可看到弹出框中获取的 jsonp 中的数据。

    简单描述就是——先定义一个方法,然后引入外部JS调用这个方法并携带数据。

    具体示例

    在同源策略下,在某个服务器下的页面是无法获取到该服务器以外的数据的,但img、iframe、script等标签是个例外,这些标签可以通过src属性请求到其他服务器上的数据。 而JSONP就是通过script节点中的src属性调用跨域的请求。当我们通过JSONP模式请求跨域资源时,服务器返回给客户端一段javascript代码,这段javascript代码自动调用客户端回调函数。

    前端

    
    
      jsonp
      
    
    
    
    
    
    

    搭建node server

    //告诉Node.js引入http模块给该服务器应用使用
    var http = require('http');
    //引入url模块解析url字符串
    var url = require('url');
    //引入querystring模块处理query字符串
    var querystring = require('querystring');
    //创建新的HTTP服务器
    var server = http.createServer();
    //通过request事件来响应request请求
    server.on('request',function(req, res){
      var urlPath = url.parse(req.url).pathname;
      var qs = querystring.parse(req.url.split('?')[1]);
      if(urlPath === '/jsonp' && qs.callback){
        res.writeHead(200,{'Content-Type':'application/json;charset=utf-8'});
        var data = {
          "name": "Monkey"
        };
        data = JSON.stringify(data);
        var callback = qs.callback+'('+data+');';
        res.end(callback);
      }
      else{
        res.writeHead(200, {'Content-Type':'text/html;charset=utf-8'});
        res.end('Hell Worldn');
      }
    });
    //监听8080端口
    server.listen('8080');
    //用于提示我们服务器启动成功
    console.log('Server running!');
    

    运行node server之后,在浏览器打开上面所写的html页面,运行结果为:

    以上就是对于 JSONP 的简洁描述,希望对你有帮助。也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/79149.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号