封装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 的一种“使用模式”,可以让网页从别的网域要资料.另一个解决这个问题的新方法是跨来源资源共享. ...
随机推荐
- Java中 System.arraycopy() 和 Arrays.copyOf()方法
System.arraycopy() 和 Arrays.copyOf()方法 阅读源码的话,我们就会发现 ArrayList 中大量调用了这两个方法.比如:我们上面讲的扩容操作以及add(int in ...
- CentOS7设置定时任务 每隔30分钟执行一次命令
ref https://blog.csdn.net/xiangxianghehe/article/details/78149094 一.安装 crontabs服务并设置开机自启: yum inst ...
- HDU-6033 Add More Zero
There is a youngster known for amateur propositions concerning several mathematical hard problems. N ...
- BSEG和BSIS、BSAS、BSID、BSAD、BSIK、BSAK 六个表的关系
BSEG和BSIS.BSAS.BSID.BSAD.BSIK.BSAK六个表的关系 1.数据关系: BSAS+BSIS+BSAK+BSIK+BSAD+BSID = BSEG 2.六个表说明: clear ...
- 每天一个小程序—第0001题(uuid模块)
第 0001 题: 做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? 一开始以为是 ...
- C# widget
Invoke(Delegate)的用法: //例如,要实时update窗体.如果在另一个线程中update,那么可以直接update(可以不在新线程中):也可以在Delegate中给出upate,然后 ...
- git切换分支报错:error: pathspec 'origin/XXX' did not match any file(s) known to git
项目上有一个分支test,使用git branch -a看不到该远程分支,直接使用命令git checkout test报错如下: error: pathspec 'origin/test' did ...
- unity 截图 压缩 处理
/****************************************************** unity屏幕截图,并转换成Base64码* 作者: lyb* 日期:2017年7月25 ...
- CentOS6.5下搭建SVN服务器
1.检查是否已安装 rpm -qa | grep subversion 如果要卸载旧版本: yum remove subversion 2.安装 yum install subversion PS:y ...
- less 前端css利器 工程化、逻辑化 css 文件
less LESS 将 CSS 赋予了动态语言的特性,如 变量, 继承,运算, 函数. 1. 浏览器方式 1.1 html <!DOCTYPE html> <html lang=&q ...