找回密码
 立即注册

QQ登录

只需一步,快速开始

billy

初级会员

7

主题

36

帖子

367

积分

初级会员

积分
367

活字格认证

billy
初级会员   /  发表于:2014-9-12 11:02  /   查看:6570  /  回复:1
目前问题:


运行结果:


CODE 为王,直接奉上。


  1.       $(document).ajaxSend(function (e, xhr, o) {
  2.           // 截获RunReport请求
  3.           if (o.url.indexOf('/ActiveReports.ReportService.asmx/RunReport') > 0) {
  4.               xhr.abort(); // 终止AR默认请求
  5.               $.ajax({
  6.                   type: "POST",
  7.                   url: o.url,
  8.                   global: false, // 这句很重要不再触发ajaxSend事件,不然会走死循环
  9.                   data: o.data,
  10.                   contentType: "application/json; charset=utf-8",
  11.                   dataType: "json",
  12.                   success: function (msg) {
  13.                       var msgStr = JSON.stringify(msg);
  14.                       msgStr = msgStr.replace(/给不能为 null 的参数指定一个 null 值/g, '此字段为必填项');
  15.                       msg = JSON.parse(msgStr);
  16.                       o.success(msg);
  17.                   },
  18.                   error: o.error
  19.               });
  20.           }
  21.       });
复制代码


代码的意图很简单:
目前存在的问题就是“给不能为 null 的参数指定一个 null 值”的输出来自后台服务,后台服务不可篡改;


要篡改文字只能通过前台操作

前端解决的原理:

捕获Ajax请求-->终止默认请求-->手动调用Ajax-->篡改返回结果-->调用默认回调函数

解决思路:
1.分析AR生成JS代码
2.分析Jquery类库源码(最开始设想用AjaxComplete事件直接修改返回JSON,后面发现AjaxComplete事件在success调用之后,所以就算修改了也没意义,这也可能是Jquery就是防止这种恶意行为


原则上通过分析如果后台“ExtendedErrorInfo”不返回数据,则会走默认的验证字符串(默认验证AR可以修改)


修改为一个人性化的文字,没想到这么波折,希望AR产品组的人员再接再厉,希望后来者可以利用上;

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

1 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2014-9-12 12:05:00
沙发
回复 1楼billy的帖子

非常感谢您能把解决方案详细的共享给大家。
文章中有代码、截图和详细的文字描述,表明楼主不仅对AR熟悉,而且技术水平、文字功底也是可圈可点。最可贵的是能把自己的成果和大家分享,点赞
希望楼主能够继续分享使用经验,让更多的用户受益。
奖品是一定要有的,您可以留下联系电话(通过论坛短消息发送给我),我们详细的沟通。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部