想要从一个百度统计页面获取到数据,从控制台获取到数据请求地址:http://tongji.baidu.com/data/...
这个地址返回的是json格式数据。
直接请求会有跨域问题,只能通过jsonp方式请求,但是会有报错(见图1)。这个问题主要是服务端返回的数据没有进行预处理,由于无法要求百度服务端进行预处理只能自己想办法了。查看jQuery文档,发现dataFilter参数可以对服务端返回的原始数据进行过滤,然后再传入success中。
现在的问题是:
在测试中 dataFilter 方法传入的data参数是undefind。网上有一些处理方法但是不灵光,求解决方案。。。
贴上我的代码:
// 使用dataFilter过滤服务端返回数据
$.ajax({
type: 'get',
url: 'http://tongji.baidu.com/data/browser/getData',
dataType: 'jsonp',
crossDomain: true,//强制跨域
jsonp: 'callback',
jsonpCallback: 'success_jsonpCallback',
dataFilter: function (data, type) {
console.log(type);
console.log(data);
return 'success_jsonpCallback(' + data + ')';
},
data: {
st: 1472659200000,
et: 1480435200000,
reportId: 200
},
success: function (data) {
console.log(data);
}
});
图1
----------------2017/3/17 “诈帖”分割线----------------
不好意思各位,这会正在清理未解决的问题。
这个问题当初可能描述的不是很清楚,我重新表达一下:
首先,我理解jsonp的原理,需要服务器端将json格式的数据以参数的形式放入一个函数调用表达式中。
-
看到jQuery的ajax方法中设置项dataFilter可以在数据返回给success之前做些预处理。
因此,我想着是不是可以在这里做本来服务器端做的事情:将json格式的数据以参数的形式放入一个函数调用。
但是,dataFilter方法中data的值确实undefined。
这块是不是dataFilter的用法不对?或者我的理解有错误?请大家指正。
首先要知道什么是
jsonp
,格式为callback({"k":"v"})
,而不是直接{"k":"v"}
http://tongji.baidu.com/data/... 这个返回的是json,没法用jsonp获取
可以Ajax请求自己的服务器,自己服务器调用http://tongji.baidu.com/data/... 返回给前端