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的更多相关文章

  1. 封装 jsonp请求数据的方法

    什么是jsonp :  Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据. 为什么我们从不 ...

  2. vue中利用Promise封装jsonp并调取数据

    Promise就是一个给一步操作提供的容器,在这个容器里,有两个阶段无法改变的阶段,第一个阶段就是Pending(进行),第二个阶段就是结果阶段,包含Fulfilled(成功).Rejected(失败 ...

  3. 封装JSONP 函数,方便请求发送

    封装JSONP 函数,方便请求发送 封装jsonp的代码和封装Ajax的代码非常的相似!可以参照食用偶! <button id="btn">点击我发送请求!</b ...

  4. vue中封装jsonp

    一.安装jsonp 二.封装

  5. javascript - 封装jsonp

    jsonp牵扯到同源策略.跨域等问题,这里不细说了. 实现就是创建动态的script标签来请求后台地址: 示例: jsonp('xxx.php', { uid: 1 }, function (res) ...

  6. ajax与jsonp中的几个封装函数

    首先是ajax里的get 在页面上添加几个标签用作测试 <body> <input type="text" id="user"> < ...

  7. jsonp的原理介绍及Promise封装

    什么叫jsonp? jsonp是json with padding(填充式json或参数式json)的简写,是通过ajax请求跨域接口,获取数据的新实现方式 jsonp的实现原理: 动态创建scrip ...

  8. jsonp跨域封装

    一.什么是同源政策? 同源策略是指在Web浏览器中,允许某个网页脚本访问另一个网页的数据,但前提是这两个网页必须有相同的URI.主机名和端口号,一旦两个网站满足上述条件,这两个网站就被认定为具有相同来 ...

  9. JSONP详解

    0.关于JSONP 什么的JSONP JSONP(JSON with Padding)是资料格式 JSON 的一种“使用模式”,可以让网页从别的网域要资料.另一个解决这个问题的新方法是跨来源资源共享. ...

随机推荐

  1. 【问题解决:死锁】Lock wait timeout exceeded; try restarting transaction的问题

    执行数据删除操作时一直超时并弹出Lock wait timeout exceeded; try restarting transaction错误 解决办法 1.先查看数据库的事务隔离级别 select ...

  2. [转] Java中的final、static、this、super

    final 关键字 final关键字主要用在三个地方:变量.方法.类. 对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改:如果是引用类型的变量,则在对其初始化之后便 ...

  3. c# 重试机制

    protected async Task<T> TryOperation<T>(int maxRetryCount,Func<Task<T>> func ...

  4. 微服务架构与实践4_Docker

    构建Docker映像 定义Dockerfile=>Docker根据Dockerfile构建出映像 包含: 基础映像(父映像)信息 维护者信息 映像操作命令 容器启动命令 .net standar ...

  5. Mac python 2.X 升级到 3.X

    Mac OS X10.9默认带了Python2.7,不过现在Python3.3.3出来了,如果想使用最新版本,赶紧升级下吧.基本步骤如下. 第1步:下载Python3.3 下载地址如下: Python ...

  6. mysql联合主键自增、主键最大长度小记

    前言 一. 联合主键自增问题 今天上午闲来无事翻看了下数据库分类表的设计,看到这样一幕: 当时我好奇的是怎么cateId自增会存在重复值的问题,然后翻看了下主键是由siteId和cateId组成.所以 ...

  7. 总结react native 事件机制

    React 事件机制 一个组件的所有事件会使用统一的事件监听器,绑定到组件的最外层,那么如何使用? bind方法,绑定并且可以传递参数 <TouchableOpacity onPress={th ...

  8. (总结)CentOS 6.x使用yum快速安装Apache+PHP+Tomcat(JSP)+MySQL

    (总结)CentOS 6.x使用yum快速安装Apache+PHP+Tomcat(JSP)+MySQL PS:这个是懒人yum快速安装法,用于开发和测试环境很方便,用于没有特殊要求的生产环境也可以.特 ...

  9. node.js中的http.response.end方法使用说明

    转载自:http://m.jb51.net/article/58468.htm 本文介绍了http.response.end的方法说明.语法.接收参数.使用实例和实现源码,需要的朋友可以参考下 方法说 ...

  10. 由设置body线性背景色引发的问题-----当声明文档类型时,对body设置线性背景色,页面背景色无法整体线性过渡

    问题:当声明文档类型时,对body设置线性背景色,页面背景色无法整体线性过渡 不声明文档类型时,对body设置线性背景色 <HTML> <head> <meta char ...