另辟蹊径之jsonp

一段请求jsonp的接口返回的数据,如下:

1
'callback({"name":"sair","data":"2017/09/14 14:31:00"})'

这段数据在jq中直接被处理成了json对象,如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$.ajax({
type: "get",
url: "http://x.xxx.xxx",
dataType: "jsonp",
jsonp: "callback",
jsonpCallback:"jq_success",
success: function(res) {
//res => {"name":"sair","data":"2017/09/14 14:31:00"}
},
error: function() {
console.log('fail');
}
});
/*
jsonp: 传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)
jsonpCallback: 自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,
也可以写"?",jQuery会自动为你处理数据
*/

那,除了jq,我们还有其他处理方法吗?

eval

1
eval('(' + 'callback({"name":"sair","data":"2017/09/14 14:31:00"})' + ')');

这样就变向的执行callback

new Function()

废话不多说,上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//这个函数为js自定义,修改数据在这里修改
function callback(obj) {
console.log(obj.name);
}

/**
* 封装的函数,3个参数
* fn:上面声明的callback函数
* fnName:callback的字符串类型
* jsonp:jsonp返回的数据
*/
function jsonFunc(fn, fnName, jsonp) {
var sFunc = 'function('+ fnName +'){'+ jsonp +'}';
var fnFunc = new Function('return ' + sFunc)();
fnFunc(fn);
}

//调用此函数会立即执行上面的callback函数
jsonFunc(callback, 'callback', 'callback({"name":"xxxx"})')

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2019 FE blog All Rights Reserved.

访客数 : | 访问量 :