首页 > 代码库 > 修改ActiveReports验证文字“给不能为 null 的参数指定一个 null 值”

修改ActiveReports验证文字“给不能为 null 的参数指定一个 null 值”


目前问题:


运行结果:
QQ截图20140911171128.png(14.68 K)
2014-9-12 11:02:28


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 值”的输出来自后台服务,后台服务不可篡改;

QQ截图20140912102942.png(59.20 K)
2014-9-12 11:02:28

要篡改文字只能通过前台操作(后台没有提供多语言资源文件,官方已确认我的另外一篇发帖)

前端解决的原理:

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

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


这里不知道是不是AR另外一个BUG,原则上通过分析如果后台“ExtendedErrorInfo”不返回数据,则会走默认的验证字符串(默认验证AR可以修改)
QQ截图20140912105601.png(74.01 K)
2014-9-12 11:02:28


修改为一个人性化的文字,没想到这么波折,希望AR产品组的人员再接再厉,希望后来者可以利用上;
 
 
转:http://gcdn.gcpowertools.com.cn/showtopic-13759.html

修改ActiveReports验证文字“给不能为 null 的参数指定一个 null 值”