封装jsonp
1.写一个类封装jsonp:
jsonp(url, params, success, funName)
参数url:请求地址
参数params:请求数据,可以是json对象,或形如"name=zs&age=10"的字符串,或null
参数success:jsonp请求成功回调函数
参数funName:指定服务端响应数据包裹json对象的函数名,也可以不传该参数
/*
* jsonp必须是get请求
* 参数:
* url:请求地址,
* params:请求体,
* success:回调函数
* funName: 函数名,jsonp返回数据会调用该函数
*/
function jsonp(url, params, success, funName) {
// 如果params是json对象,转换成字符串,格式为"name=张三&age=10"
if(params && typeof params == 'object') {
var tempArray = [];
for(var key in params) {
var value = params[key];
tempArray.push(key + "=" + value);
}
// tempArray ==> [ 'key1=value1', 'key2=value2']
// params ==> 'key1=value1&key2=value2'
params = tempArray.join("&");
//alert("params:" + params); // params:name=张三&age=10
} var script = document.createElement("script"); if(!funName) {
// 定义一个随机的函数名
var funName = 'callback_' + Date.now() + Math.random().toString().substr(2, 5);
} // 函数定义,jsonp返回数据会调用该函数
window[funName] = function(data) {
success(data);
delete window[funName];
document.body.removeChild(script);
} //script.src = "http://localhost/Demo01/jsonResult?jsonp=funName";
url = url + "?" + "jsonp=" + funName;
if(params) {
url += "&" + params;
} script.src = url;
document.body.appendChild(script); // 发送跨域请求,服务器返回数据:funName({"name":"李四","age":20})
}
2.测试
调用自己封装的函数:jsonp(url, params, success, funName),服务端响应:fun1({"name":"李四","age":20})
<script type="text/javascript">
window.onload = function() {
var btn = document.getElementById("btn");
btn.onclick = function() {
jsonp("http://localhost/Demo01/jsonResult", null, function(data) {
var fontEle = document.getElementById("font");
fontEle.innerHTML = data.name + "-" + data.age;
}, "fun1");
};
};
</script>
<input type="button" id="btn" value="点击发送Ajax请求"/>
<h1><font color="red" id="font"></font></h1>
3.服务端controller:
@Controller
public class JsonResultController {
@RequestMapping("/jsonResult")
@ResponseBody
public String fun1(String jsonp) {
if(jsonp.length() > 0) { // jsonp请求
return jsonp + "(" + "{\"name\":\"李四\",\"age\":20}" + ")";
} else {
return "{\"name\":\"李四\",\"age\":20}";
}
}
}
封装jsonp的更多相关文章
- 封装 jsonp请求数据的方法
什么是jsonp : Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据. 为什么我们从不 ...
- vue中利用Promise封装jsonp并调取数据
Promise就是一个给一步操作提供的容器,在这个容器里,有两个阶段无法改变的阶段,第一个阶段就是Pending(进行),第二个阶段就是结果阶段,包含Fulfilled(成功).Rejected(失败 ...
- 封装JSONP 函数,方便请求发送
封装JSONP 函数,方便请求发送 封装jsonp的代码和封装Ajax的代码非常的相似!可以参照食用偶! <button id="btn">点击我发送请求!</b ...
- vue中封装jsonp
一.安装jsonp 二.封装
- javascript - 封装jsonp
jsonp牵扯到同源策略.跨域等问题,这里不细说了. 实现就是创建动态的script标签来请求后台地址: 示例: jsonp('xxx.php', { uid: 1 }, function (res) ...
- ajax与jsonp中的几个封装函数
首先是ajax里的get 在页面上添加几个标签用作测试 <body> <input type="text" id="user"> < ...
- jsonp的原理介绍及Promise封装
什么叫jsonp? jsonp是json with padding(填充式json或参数式json)的简写,是通过ajax请求跨域接口,获取数据的新实现方式 jsonp的实现原理: 动态创建scrip ...
- jsonp跨域封装
一.什么是同源政策? 同源策略是指在Web浏览器中,允许某个网页脚本访问另一个网页的数据,但前提是这两个网页必须有相同的URI.主机名和端口号,一旦两个网站满足上述条件,这两个网站就被认定为具有相同来 ...
- JSONP详解
0.关于JSONP 什么的JSONP JSONP(JSON with Padding)是资料格式 JSON 的一种“使用模式”,可以让网页从别的网域要资料.另一个解决这个问题的新方法是跨来源资源共享. ...
随机推荐
- P3261 [JLOI2015]城池攻占
思路 左偏树维护每个骑士的战斗力和加入的深度(因为只能向上跳) 注意做乘法的时候加法tag会受到影响 代码 #include <cstdio> #include <algorithm ...
- (转)干货|这篇TensorFlow实例教程文章告诉你GANs为何引爆机器学习?(附源码)
干货|这篇TensorFlow实例教程文章告诉你GANs为何引爆机器学习?(附源码) 该博客来源自:https://mp.weixin.qq.com/s?__biz=MzA4NzE1NzYyMw==& ...
- Unity3D学习笔记(二十九):AssetBundle
AssetBundle 什么是AssetBundle? AssetBundle是把一些资源文件或场景文件,以某种方式保存在一个文件中.一个AssetBundle可以包含模型.材质.图片或场景等.但是A ...
- 【ASP.NET】System.Web.Routing - PageRouteHandler Class
用于提供一些属性和方法来定义如何将URL匹配到一个物理文件上面. public PageRouteHandler (string virtualPath, bool checkPhysicalUrlA ...
- 【SQL】【Join基础】了解sql中的join用法,看这一篇就够了
转自: https://www.cnblogs.com/reaptomorrow-flydream/p/8145610.html SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之 ...
- Linux命令1——a
addUser: -c:备注 -d:登陆目录 -e:有效期限 -f:缓冲天数 -g:组 -b:用户目录 -G:附加组 -s:制定使用默认的shell -u:指定用户ID -r:建立系统账号 -M:不自 ...
- try里Response.end()问题
问题 在xxx.aspx.cs中处理异步请求,大致代码如下: 但会发现始终会进catch. 原因 Response.End()会引发ThreadAbortException. 解决方案 使用HttpC ...
- vue--vuex
https://vuex.vuejs.org/ vuex是专为 vue.js 应用程序开发的 状态管理模式 采用集中式存储管理应用的所有组件状态 并以相应的规则保证状态以一种可预测的方式发生变化 vu ...
- CSS--点击改变样式
当某个链接或元素被选中时可以时,需要改变其颜色或状态,而stylus中提供&选择器,&指向父选择器,用于判断父元素达到某条件时改变状态,下面的例子中当父元素router-link有被选 ...
- C# 整理DotNetBar中SuperGridControl的一些基础属性
//控制表格只能选中单行 superGridControl1.PrimaryGrid.MultiSelect = false; superGridControl1.PrimaryGrid.Initia ...