Node.js返回JSONP

  在使用JQuery的Ajax从服务器请求数据或者向服务器发送数据时常常会遇到跨域无法请求的错误,常用的解决办法就是在Ajax中使用JSONP。基于安全性考虑,浏览器会存在同源策略,然而<script/>标签却具有跨域访问数据的能力,这就是JSONP工作的基本原理。有关同源策略以及什么是JSONP,可以参考园子里的这篇文章http://www.cnblogs.com/yuzhongwusan/archive/2012/12/11/2812849.html

  在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: ‘[email protected]‘, 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对象。

时间: 2024-10-21 14:40:48

Node.js返回JSONP的相关文章

Node.js 使用jQuery取得Nodejs http服务端返回的JSON数组示例

server.js代码: // 内置http模块,提供了http服务器和客户端功能(path模块也是内置模块,而mime是附加模块) var http=require("http"); // 创建服务器,创建HTTP服务器要调用http.createServer()函数,它只有一个参数,是个回调函数,服务器每次收到http请求后都会调用这个回调函数.服务器每收到一条http请求,都会用新的request和response对象触发请求函数. var server=http.createS

Node.js 使用jQuery取得Nodejs http服务端返回的JSON文字示例

server.js代码: // 内置http模块,提供了http服务器和客户端功能(path模块也是内置模块,而mime是附加模块) var http=require("http"); // 创建服务器,创建HTTP服务器要调用http.createServer()函数,它只有一个参数,是个回调函数,服务器每次收到http请求后都会调用这个回调函数.服务器每收到一条http请求,都会用新的request和response对象触发请求函数. var server=http.createS

Node.js面试题:侧重后端应用与对Node核心的理解

Node是搞后端的,不应该被被归为前端,更不应该用前端的观点去理解,去面试node开发人员.所以这份面试题大全,更侧重后端应用与对Node核心的理解. node开发技能图解 node 事件循环机制 起源 node正风生火起,很多介绍却停留在入门阶段,无法投入生产 node相关的高质量面试题更是少之又少,很难全面考查应聘者的node能力 许多文章在讲第三方类库,可是这些库质量差距较大,一旦遇到问题怎么办 必需的,全面了解node核心才能成为一名合格的node开发人员 目标与原则 前后端兼顾,更侧重

node.js面试题大全-侧重后端应用与对Node核心的理解

Node是搞后端的,不应该被被归为前端,更不应该用前端的观点去理解,去面试node开发人员.所以这份面试题大全,更侧重后端应用与对Node核心的理解. github地址: https://github.com/jimuyouyou/node-interview-questions 注: 这人本人历时一星期完成的小作品,github里面对一些关键代码还有js源文件.直接node filename.js就可查看效果. 第一个版本,写的匆忙,能力有限,欢迎拍砖补充!后面持续更新会及时发布到github

Node.js Express 框架

Express 简介 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具. 使用 Express 可以快速地搭建一个完整功能的网站. Express 框架核心特性: 可以设置中间件来响应 HTTP 请求. 定义了路由表用于执行不同的 HTTP 请求动作. 可以通过向模板传递参数来动态渲染 HTML 页面. 安装 Express 安装 Express 并将其保存到依赖列表中: $ cnpm install

了不起的Node.js读书笔记

原文摘自我的前端博客,欢迎大家来访问 http://www.hacke2.cn 第二章 Js概览 基于GoogleV8引擎 Object.keys(o) 数组方法:遍历forEach.过滤filter.改变map 实现了String.prototype.trim() 含有JSON解析 第三章 阻塞与非阻塞IO 单线程注意点 小心处理内存中的变量,可能会影响两次访问的结果 不要编写阻塞式代码,可能会影响第二次访问的时间 事件轮训 先注册事件 不断询问这些事件是否已经分发dispatch 当事件分发

Node.js笔记(一)项目的建立

1.supervisor 可以帮助你实现这个功能,它会监视你对代码的改动,并自动重启 Node.js. 使用方法很简单,首先使用 npm 安装 supervisor: 2.app.js是工程的入口,里面负责定义路由控制器 routes/index.js 是路由控制器文件 用于组织展示的内容 3.index.ejs 是模板文件 即routes/index.js中调用的模版 4.app.get('/hello', routes.hello); 固定的路径设置路由规则 5. app.get('/use

Node.js连接MySQL数据库及构造JSON的正确姿势

做一下整理,以前也很随意的引入包链接数据库,后来发现常常连接出问题,异常退出,后来使用在网上一个方法解决问题,网址由于书签丢失,抱歉不能引用了.再有就是简单的模块化下,使得目录合理点,再有就是说明一下,标题有赚眼球的嫌疑,代码我这里使用正常,而且我觉得也蛮好用,不过不代表真的就是该这么写,毕竟我还是个node菜鸟,大神路过有更好的方式方法,还请留下脚印,感激不尽! Node版本:v0.10.34 Express版本:4.9.0 在继续进行之前,假设你搭建的本地环境已经可以看到这个界面: ----

Node.js:Express 框架

Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具.使用 Express 可以快速地搭建一个完整功能的网站. Express 框架核心特性: 可以设置中间件来响应 HTTP 请求. 定义了路由表用于执行不同的 HTTP 请求动作. 可以通过向模板传递参数来动态渲染 HTML 页面. 1.安装 Express 并将其保存到依赖列表中: $ cnpm install express --save 以上命令会