Node.js返回JSONP详解


Posted in Javascript onMay 18, 2016

在使用JQuery的Ajax从服务器请求数据或者向服务器发送数据时常常会遇到跨域无法请求的错误,常用的解决办法就是在Ajax中使用JSONP。基于安全性考虑,浏览器会存在同源策略,然而<script/>标签却具有跨域访问数据的能力,这就是JSONP工作的基本原理。有关同源策略以及什么是JSONP。

在Node.js中实现JSONP非常简单,通过下面的代码我们从服务器返回并运行一个JavaScript函数,这个JavaScript函数已经在调用方提前被定义好了,于是当它被返回的时候就自动执行了。

var express = require('express');
var router = express.Router();

router.get('/getinfo', function(req, res, next) {
 var _callback = req.query.callback;
 var _data = { email: 'example@163.com', name: 'jaxu' };
 if (_callback){
   res.type('text/javascript');
   res.send(_callback + '(' + JSON.stringify(_data) + ')');
 }
 else{
   res.json(_data);
 }
});

module.exports = router;

代码中必须规定从服务器返回数据的类型,代码res.type('text/javascript')被加在返回的数据之前用于告诉浏览器这是一段JavaScript代码。

前端页面通过JQuery调用:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>jsonp test</title>
  <script src="/bower_components/jquery/dist/jquery.js"></script>
</head>
<body>
  <input type="button" value="click" id="btn">
  <script type="text/javascript">
    $(function(){
      $('#btn').on('click', function(){
        $.get('http://anothersite/api/getinfo', function(d){
          console.log(d);
        }, 'jsonp');
      });
    });
  </script>
</body>
</html>

运行代码,点击按钮,在浏览器的console面板总我们可以看到从远程服务器返回的json对象。

Node.js返回JSONP详解

以上这篇Node.js返回JSONP详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js prototype 格式化数字 By shawl.qiu
Apr 02 Javascript
js面向对象编程之如何实现方法重载
Jul 02 Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
Aug 06 Javascript
Web前端开发工具——bower依赖包管理工具
Mar 29 Javascript
使用递归遍历对象获得value值的实现方法
Jun 14 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
Oct 14 Javascript
JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
Jan 05 Javascript
Bootstrap选项卡学习笔记分享
Feb 13 Javascript
详解vuex之store源码简单解析
Jun 13 Javascript
超简单的微信小程序轮播图
Nov 22 Javascript
Javascript模拟实现new原理解析
Mar 03 Javascript
手把手教您实现react异步加载高阶组件
Apr 07 Javascript
noty ? jQuery通知插件全面解析
May 18 #Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
May 18 #Javascript
jQuery实现图片向左向右切换效果的简单实例
May 18 #Javascript
JavaScript 基础函数_深入剖析变量和作用域
May 18 #Javascript
实现JavaScript的组成----BOM和DOM详解
May 18 #Javascript
深入理解JQuery中的事件与动画
May 18 #Javascript
Adapter适配器模式在JavaScript设计模式编程中的运用分析
May 18 #Javascript
You might like
使用PHP获取网络文件的实现代码
2010/01/01 PHP
php中防止伪造跨站请求的小招式
2011/09/02 PHP
php读取目录所有文件信息dir示例
2014/03/18 PHP
PHP中配置IIS7实现基本身份验证的方法
2015/09/24 PHP
PHP结合Mysql数据库实现留言板功能
2016/03/04 PHP
PHP实现一个按钮点击上传多个图片操作示例
2020/01/23 PHP
JavaScript 事件属性绑定带参数的函数
2009/03/13 Javascript
在IE上直接编辑网页内容的js代码(IE地址栏js)
2009/04/27 Javascript
javascript 表单规则集合对象
2009/07/21 Javascript
jQuery选择器中含有空格的使用示例及注意事项
2013/08/25 Javascript
jQuery中对未来的元素绑定事件用bind、live or on
2014/04/17 Javascript
node.js中的buffer.fill方法使用说明
2014/12/14 Javascript
JavaScript简单下拉菜单特效
2016/09/13 Javascript
利用JS轻松实现获取表单数据
2016/12/06 Javascript
Angular2实现自定义双向绑定属性
2017/03/22 Javascript
微信小程序中页面FOR循环和嵌套循环
2017/06/21 Javascript
JS与HTML结合实现流程进度展示条思路详解
2017/09/03 Javascript
基于iScroll实现内容滚动效果
2018/03/21 Javascript
Angular项目如何升级至Angular6步骤全纪录
2018/09/03 Javascript
微信小程序实现获取用户信息并存入数据库操作示例
2019/05/07 Javascript
layui实现数据表格table分页功能(ajax异步)
2019/07/27 Javascript
微信小程序之侧边栏滑动实现过程解析(附完整源码)
2019/08/23 Javascript
Node.js文本文件BOM头的去除方法
2020/11/22 Javascript
python中pygame针对游戏窗口的显示方法实例分析(附源码)
2015/11/11 Python
探究python中open函数的使用
2016/03/01 Python
基于Python中单例模式的几种实现方式及优化详解
2018/01/09 Python
对python中数据集划分函数StratifiedShuffleSplit的使用详解
2018/12/11 Python
python3.7 openpyxl 在excel单元格中写入数据实例
2020/09/01 Python
python实现学生通讯录管理系统
2021/02/25 Python
CSS3教程(7):CSS3嵌入字体
2009/04/02 HTML / CSS
Html5如何唤起百度地图App的方法
2019/01/27 HTML / CSS
Java基础知识面试题
2014/03/25 面试题
高二英语教学反思
2014/01/19 职场文书
2014年教研工作总结
2014/12/06 职场文书
Python读取文件夹下的所有文件实例代码
2021/04/02 Python
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
2021/06/21 MySQL