Node+H5 实现简单的 JSONP 封装

前端代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JSONP</title>
</head>
<body>
</body>
<script type="text/javascript">
    /* 封装一个 JSONP 的 交互类 */
    var JSONP = (function () {
        /**
         * @param url => 访问的地址
         * @param cbKey => 回调函数的名称, 服务端接收的字段
         * @param json => 传给后台的数据, 一个单层的 json 对象
         * @param callBack => 回调函数
         */
        var $ = {};
        $.GetJson = function (url, cbKey, json, callBack) {
            /* 获取一个不会重复的 JSONP 回调名称, 并将该名称注入到类中实现一个方法 */
            var cbValue = "json" + Math.random().toString(16).substr(2);
            $[cbValue] = function (res, id) {
                var domObj = document.getElementById(id.split(".")[1]).remove(0);
                callBack(res);
            };
            /* 拼接请求地址 */
            url = url + "?" + cbKey + "=JsonP." + cbValue;
            for (var key in json) {
                url += "&" + key + "=" + json[key];
            }
            /* 拼接 script 标签 并写入文档对象 */
            var script = ‘<script id="‘+ cbValue +‘" src="‘+ url +‘"><\/script>‘;
            document.write(script);
        };
        return $;
    })();

    /* 调用 JSONP 交互类的方法 */
    JSONP.GetJson("http://localhost/JsonP/Index", "cb", {id: 1}, function (res) {
        console.log(res);
    });
</script>
</html>

后端代码  => 基于 KOA 框架

// 引入外部依赖
let Router = require("koa-router");

// 实例化一个子路由
let router = new Router();

// 这里写业务逻辑
router.get("/Index", async (ctx) => {

    // 接收前端传过来的回调方法
    let callback = ctx.query.cb;

    // 一番业务逻辑之后的返回值
    let result = {
        id: ctx.query.id,
    };
    ctx.type = "text/javascript"; // 设置输出为 JavaScript 文件

    /**
     * 返回给前端的数据格式
     * 前端传递的回调方法名( 返回给前端的数据格式, 前端传递的回调方法名 )
     * 如: cb( {id: 1}, cb )
     */
    ctx.body = `${callback}(${JSON.stringify(result)}, "${callback}")`;

});

// 对外暴露模块
module.exports = router;

 

 

时间: 2024-11-10 08:16:56

Node+H5 实现简单的 JSONP 封装的相关文章

iOS开发—音频的播放的简单介绍和封装工具类

iOS开发—音频的播放的简单介绍和封装工具类 一.音效的播放简单介绍 简单来说,音频可以分为2种 (1)音效 又称“短音频”,通常在程序中的播放时长为1~2秒 在应用程序中起到点缀效果,提升整体用户体验 (2)音乐 比如游戏中的“背景音乐”,一般播放时间较长 框架:播放音频需要用到AVFoundation.framework框架 二.音效的播放 1.获得音效文件的路径 NSURL *url = [[NSBundle mainBundle] URLForResource:@"m_03.wav&qu

node.js搭建简单的websocket

1.首先在官网http://www.nodejs.org/下载NODE.JS 2.打开命令行CMD,进入NODEJS\node_modules\的目录,输入npm install socket.io  安装socket.io模块.别急着关掉此CMD窗口,后面有用 3.搭建服务端代码server.js 1 var http = require('http'); 2 var io = require('socket.io'); 3 var cisserver = http.createServer(

获取样式的简单的函数封装

var CSS = { getStyle:function(elem,name){//获取样式 if(elem.style[name]){ return elem.style[name]; } else if(elem.currentStyle){ return elem.currentStyle[name]; } else if(document.defaultView && document.defaultView.getComputedStyle){ name = name.repl

java中简单的db封装

package com.melin.bbs;    import java.sql.Connection;  import java.sql.DriverManager;  import java.sql.ResultSet;  import java.sql.SQLException;  import java.sql.Statement; public class DB { //建立连接 public static Connection getConn(){          Connect

简单二次封装的Golang图像处理库:图片裁剪

简单二次封装的Golang图像处理库:图片裁剪 一.功能 Go语言下的官方图像处理库 简单封装后对jpg和png图像进行缩放/裁剪的库 二.使用说明 1.首先下载 go get -v -u github.com/hunterhug/go_image 2.主要函数 按照宽度进行等比例缩放,第一参数是图像文件,第二个参数是缩放后的保存文件路径 err := ScaleF2F(filename, savepath, width) 按照宽度和高度进行等比例缩放,第一参数是图像文件,第二个参数是缩放后的保

Node + H5 + WebSocket + Koa2 实现简单的多人聊天

服务器代码  ( 依赖于 koa2,  koa-websocket ) /* 实例化外部依赖 */ let Koa = require("koa2"); let WebSocket = require("koa-websocket"); /* 实例化 WebSocket, 实例化储存所有上线文数组 并分配监听的端口 */ let app = WebSocket(new Koa()); let ctxs = []; app.listen(80); /* 实现简单的接发

仿照jQuery进行一些简单的框架封装(欢迎指教~)

1 (function(window,undefined){ 2 var arr = [], 3 push = arr.push, 4 slice = arr.slice; 5 //首先要做的就是封装一个parseHtml函数 6 //要注意的是,parthHtml要放在一个自调用函数内 7 var parseHtml = (function(){ 8 //做一个模板 9 var div = document.createElement('div'); 10 //这个函数是用来创建标签 11 f

使用Node.js实现简单的网络爬取

由于最近要实现一个爬取H5游戏的代理服务器,隧看到这么一篇不错的文章(http://blog.miguelgrinberg.com/post/easy-web-scraping-with-nodejs),加之最近在学习Node.js,所以就准备翻译出来加深一下印象. 转载请注明来源:(www.cnblogs.com/xdxer )   在这篇文章中,我将会向大家展示如何用JavaScript配合Node.js写一个网络爬取的脚本. 网络抓取工具 在大部分情况下,一个网络抓取的脚本只需要一种方法去

简单理解jsonp原理

对于javascript程序员来说,发送ajax请求获取后台数据然后把数据和模板拼接成字符串渲染回DOM实现无刷新更新页面这样的操作可谓是轻车熟路.但众所周知,ajax有一个不好,就是不能跨域传输数据,而跨域传输有时候又是必须用到的,比如我们可能需要调用第三方网站提供的某些API来获取某些信息,提供给我们网站的用户. 例如,要开发一个天气应用,你可能需要调用第三方的天气API,这个时候就必然涉及到跨域请求数据,因为毕竟我们不可能为了开发一个天气应用就自己搭建一个天气API.在少数情况下,如果第三