javascript - jsonp返回json格式无法通过dataFilter进行预处理◔ ‸◔?
高洛峰
高洛峰 2017-04-11 10:23:11
[JavaScript讨论组]

想要从一个百度统计页面获取到数据,从控制台获取到数据请求地址: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的用法不对?或者我的理解有错误?请大家指正。

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(2)
黄舟

如果这样可行,安全机制都没用了

迷茫

这是因为执行顺序的原因,
jsonp会先将接受到的内容当作一段代码加载到当前的运行环境中,然后再根据jsonpCallback中的名称去调用它。
此处由于服务端返回的根本就不是一段可以被执行的代码,自然会报语法错误了。
要想解决跨域问题这样是不行的。你可以用自己的服务器去做中转来实现。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号