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 相关文章推荐
Code:findPosX 和 findPosY
Dec 20 Javascript
js触发asp.net的Button的Onclick事件应用
Feb 02 Javascript
原生JS操作网页给p元素添加onclick事件及表格隔行变色
Dec 01 Javascript
window.open打开窗口被拦截的快速解决方法
Aug 04 Javascript
AngularJS压缩JS技巧分析
Nov 08 Javascript
基于Bootstrap和jQuery构建前端分页工具实例代码
Nov 23 Javascript
BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案
Dec 14 Javascript
微信小程序实战之顶部导航栏(选项卡)(1)
Jun 19 Javascript
浅析Node.js非对称加密方法
Jan 29 Javascript
详解Vue.js v-for不支持IE9的解决方法
Dec 29 Javascript
使用eslint和githooks统一前端风格的技巧
Jul 29 Javascript
教你一步步实现一个简易promise
Nov 02 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
56.com视频采集接口程序(PHP)
2007/09/22 PHP
PHP中文件读、写、删的操作(PHP中对文件和目录操作)
2012/03/06 PHP
PHP5各个版本的新功能和新特性总结
2014/03/16 PHP
PHP session文件独占锁引起阻塞问题解决方法
2015/05/12 PHP
PHP的PDO操作简单示例
2016/03/30 PHP
php生成Android客户端扫描可登录的二维码
2016/05/13 PHP
PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算示例【基于strtotime】
2017/04/19 PHP
PHP+ajax实现获取新闻数据简单示例
2018/05/08 PHP
JQuery打造PHP的AJAX表单提交实例
2009/11/03 Javascript
(跨浏览器基础事件/浏览器检测/判断浏览器)经验代码分享
2013/01/24 Javascript
理解javascript中的回调函数(callback)
2014/09/02 Javascript
Google 地图获取API Key详细教程
2016/08/06 Javascript
原生JS实现的放大镜效果实例代码
2016/10/15 Javascript
js HTML5 canvas绘制图片的方法
2017/09/08 Javascript
AngularJS实时获取并显示密码的方法
2018/02/06 Javascript
vue.js 中使用(...)运算符报错的解决方法
2018/08/09 Javascript
基于vue.js中关于下拉框的值默认及绑定问题
2018/08/22 Javascript
vue+axios实现文件下载及vue中使用axios的实例
2018/09/21 Javascript
Node.js API详解之 zlib模块用法分析
2020/05/19 Javascript
[01:19:54]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#1Alliance VS EHOME
2016/03/03 DOTA
django实现用户登陆功能详解
2017/12/11 Python
python随机数分布random测试
2018/08/27 Python
python覆盖写入,追加写入的实例
2019/06/26 Python
python3实现带多张图片、附件的邮件发送
2019/08/10 Python
Python + selenium + crontab实现每日定时自动打卡功能
2020/03/31 Python
python爬虫使用scrapy注意事项
2020/11/23 Python
CSS3 media queries + jQuery实现响应式导航
2016/09/30 HTML / CSS
CSS3中Transform动画属性用法详解
2016/07/04 HTML / CSS
css3实现背景模糊的三种方式(小结)
2020/05/15 HTML / CSS
解决Firefox下不支持outerHTML问题代码分享
2014/06/04 HTML / CSS
科颜氏英国官网:Kiehl’s英国
2019/11/20 全球购物
统计系教授推荐信
2014/02/28 职场文书
工程售后服务承诺书
2014/05/21 职场文书
建设工地安全标语
2014/06/07 职场文书
社区创先争优承诺书
2014/08/30 职场文书
经营场所证明范本
2015/06/19 职场文书