使用NODEJS实现JSONP的实例
JSONP与JSON只有一字之差,我们在使用Jquery的Ajax调用的时候也是使用相同的方法来调用,两者的区别几乎只在于使用的dataType这个属性的不同。但是实际上JSON和JSONP是完全不同的两个东西,JSON是一个数据格式,就好像XML一样,JSONP适用于解决远程调用本地回调函数跨域的问题。
当指定dataType为JSON的时候,回调函数的参数(success:function(data)里面的data)是一个JSON格式的数据字符串,类似于“{‘NAME’:'ckym','Age':27}”,在success中定义处理这个数据的逻辑。
当指定dataType为JSONP的时候,回调函数的定义是一样的,但是服务器返回的就不是一个JSON的数据了,而是一个调用的方法字符串,例如“showMessage(JSON.stringify(data))”,此时,ajax就会调用success后面定义的方法来代替这个这个showMessage方法。
所以不管是JSON还是JSONP,处理代码的逻辑都定义在success这个回调函数中。
下面是一个实例程序(基于NodeJS,需要安装Express,当然其他的开发语言也是一样的道理)。
Server端:
var express=require('express');
var app=express();
app.get('/',function(req,res,err){
var data=[{"Name":'ckym',"password":'12345678'}];//数据格式必须使用双引号,否则会报错
var result="showMessage("+JSON.stringify(data)+")";
res.end(result);
})
app.listen('8001',function(err){
if(err){
console.log(err);
}else{
console.log("客户端在8001端口监听成功!");
}
})
Client端:
var express=require('express');
var path=require('path');
var app=express();
app.get('/',(req,res,err)=>{
res.sendFile(path.join(__dirname,'Main.html'));//注意sendFile必须使用绝对路径,否则程序会报错
})
app.use(express.static('Scripts'));//路径不区分大小写
app.listen(8000,(err)=>{
if(err){
console.log(err);
}else{
console.log('端口8000监听成功!');
}
})
Html页面(Main.html):
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'/>
<title>JSONP测试</title>
<script src='/JS/jquery-3.2.1.min.js'></script>
</head>
<body>
<h2>这是一个NodeJs的JSONP测试项目</h2>
<script>
$(document).ready(function(){
$.ajax({
url:'http://localhost:8001/',
dataType:'jsonp',//此处如果使用json的话就会出现error的报错,是因为XMLHttpRequest不支持跨域访问
//所以会报错,为解决这个问题,需要使用JSONP的数据类型,script等元素节点的src属性是自带跨域访问的
//功能,所以也能用来解决跨域问题
type:'get',//JSONP只支持get方法请求
jsonp:'callback',
jsonpCallback:"showMessage",//定义jsonp执行的回调函数的名称--与服务端返回的数据中的方法的名称相同
success:function(data){
alert("这是一个跨域调用方法的数据:"+JSON.stringify(data));
},
error:function(err){
alert("ajax出现错误,请联系管理员!:"+JSON.stringify(err));
}
})
})
</script>
</body>
</html>
使用NODEJS实现JSONP的实例的更多相关文章
- nodejs+express+ejs+mongoose实例
nodejs+express+ejs+mongoose实例 nodejs学得异常痛苦,在这里将学的东西做一番整理,算是自我安慰吧.根据网上todo示例,用express和mongoose重写了部分代码 ...
- jsonp 演示实例 —— 基于node
序 同源策略是浏览器处于安全考虑,为通信设置了"相同的域.相同的端口.相同的协议"这一限制.这让我们的ajax请求存在跨域无权限访问的问题. 同时我们发现script标签引入脚本的 ...
- Jsonp理论实例代码详解
什么是Json?JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - ...
- jsonp调用实例
首先我们来定义接口的规范,就像这样:http://www.mydomain.com/jsonp/ticker?symbol=IBM&callback=showPricesymbol是请求条件, ...
- JavaScript跨域请求和jsonp请求实例
<script type="text/javascript" src="./whenReady.js"></script> <sc ...
- Nodejs后台管理员登录实例
思路: 直接访问后台页面时如果无session则跳转到404 当在登录页的表单提交时对数据库进行匹配,匹配成功生成session,否则提示用户名或密码错误 准备页面 :后台首页.登录页.404页, 步 ...
- 百度搜索关键词联想API JSONP使用实例
许多搜索引擎都提供了关键词联想api,且大多数都是jsonp. Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获 ...
- Struts2的jsonp接口实例
和以往写struts2程序一样,action方法跳转到一个JSP中,为了配合jsonp的跨域,要在JSP中做一个输出 JSP: <%@ page language="java" ...
- php下的jsonp使用实例
参考资料:http://www.cnblogs.com/chopper/archive/2012/03/24/2403945.html 测试依赖条件: 项目eetopinOfficial 在hosts ...
随机推荐
- CSS Blur() 将高斯模糊应用于输出图片
一.Css Blur() blur() CSS 方法将高斯模糊应用于输出图片. 结果为 <filter-function>. blur(radius) radius模糊的半径,值为< ...
- BaiduPCS-Go的安装及使用
BaiduPCS-Go的安装及使用 linux下会提示输入验证码,浏览器打开验证码url,多输入几次 Contents [hide] 一. 软件下载及安装 二. 软件的使用 1. 账号登录与退出 2. ...
- 【转发】jquery实现自动打开新的页签
通常我们想要浏览器在回调方法中打开一个页签,用这个方法 //window.open("http://www.baidu.com") ; //自动打开新窗口,会被浏览器拦 ...
- 解决:File "/usr/lib/python2.7/site-packages/more_itertools/more.py", line 340 def _collate(*iterables, key=lambda a: a, reverse=False): 的报错
cyberb commented on 15 Apr Traceback (most recent call last): File "/snap/users/x1/python/bin/l ...
- 面试突击(六)——JVM如何实现JAVA代码一次编写到处运行的?
声明:本文图片均来自网络,我只是进行了选择,利用一图胜千言的力量来帮助自己快速的回忆相关的知识点 JVM是 JAVA Virtual Machine 三个英文单词的首字母缩写,翻译成中文就是Java虚 ...
- PPT宝典
http://www.ppt115.com/ 是一个 ppt 网站资源导航,专注分享有关 ppt 相关的网站.教程.使用方法等.
- 用GEOquery从GEO数据库下载数据--转载
https://www.plob.org/article/9969.html Gene Expression Omnibus database (GEO)是由NCBI负责维护的一个数据库,设计初衷是为 ...
- redis支持远程接入的安全防护问题
如果我们没有启用保护模式,支持远程接入,启用默认端口6379,而且是用root用户启动的,那么基本上redis就是在裸奔了,人家分分钟搞你没商量. 我们模拟一下,现在机器A(ip假设为10.100.1 ...
- linux查看实时日志命令
tail -f localhost_access_log.2018-12-11.txt(当前时间)今天的实时日志,操作一下系统,就会报出相应的日志
- Android android:allowBackup waiting for backup
在Google settings 中,有个backup 选项,在里面选择开启 如果开启vpn,还是在setting里面还是waiting for backup, 就通过手机链接电脑,安装android ...