汇联通执法队后台管理系统
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. /**
  2. * ajax发送接收二进制文件
  3. * 浏览器支持情况:ie10+,chrome,firefox
  4. * 示例见:${rootUrl}app/zfdm/binAjax,jsp页面中的访问url按实际情况修改。
  5. *
  6. * createBinXhr(url,globalOpts)
  7. * globalOpts参数
  8. * withCredentials:跨域是否启用凭证
  9. * handleError(status,msg,xhr):服务器端处理出错回调,省去每次调用都写
  10. * responseError(status,xhr):服务器端处理出错回调,省去每次调用都写
  11. *
  12. * binAjax(opts) 参数
  13. * serviceType:接口类型
  14. * json:json类型数据
  15. * beforeSend(xhr):在send前回调,xhr为XMLHttpRequest对象,可在此函数里修改xhr
  16. * success(json,xhr):服务成功回调,json为服务器返回的结果
  17. * handleError(status,msg,xhr):服务器端处理出错回调,status为状态码,msg为服务器范围的错误信息
  18. * responseError(status,xhr):http响应出错回调
  19. *
  20. */
  21. function createBinXhr(url,globalOpts){
  22. function BinXhr(url){
  23. this.url=url;
  24. this.globalOpts=globalOpts||{};
  25. }
  26. BinXhr.prototype={
  27. constructor:BinXhr,
  28. defaultHandleError:function(){
  29. alert("服务器端处理出错,请检查数据格式并重试!");
  30. },
  31. defaultResponseError:function(){
  32. alert("http响应出错,请检查网络并重试!");
  33. },
  34. generateFileName:function(serviceType){
  35. return serviceType+"_REQ_"+new Date().format("yyyyMMddHHmmssS")+".json";
  36. },
  37. binAjax:function(opts){
  38. var gOpts=this.globalOpts;
  39. var handleError=opts.handleError||gOpts.handleError||this.defaultHandleError,
  40. responseError=opts.responseError||gOpts.responseError||this.defaultResponseError;
  41. var fileName=this.generateFileName(opts.serviceType);
  42. var myForm = new FormData();
  43. myForm.append("filename",fileName);
  44. var jsonStrArr=[JSON.stringify(opts.json||"{}")];
  45. var BlobBuilder = window.MozBlobBuilder || window.WebKitBlobBuilder || window.BlobBuilder;
  46. if(BlobBuilder) {
  47. var oBuilder = new BlobBuilder();
  48. oBuilder.append(jsonStrArr[0]);
  49. var blob = oBuilder.getBlob("text/plain"); // the blob
  50. } else {
  51. var blob = new Blob(jsonStrArr, { 'type': 'text/json' });
  52. }
  53. // var blob = new Blob([JSON.stringify(opts.json||"{}")], { 'type': 'text/json' });
  54. myForm.append("binFile",blob,fileName);
  55. var xhr = new XMLHttpRequest();
  56. xhr.open("POST", this.url,true);
  57. xhr.responseType = 'blob';
  58. xhr.withCredentials = !!gOpts.withCredentials;
  59. if(opts.beforeSend)opts.beforeSend(xhr);
  60. xhr.send(myForm);
  61. xhr.onreadystatechange = function (){
  62. if ( xhr.readyState == 4 ) {
  63. if(xhr.status == 200){
  64. var reader = new FileReader();
  65. reader.readAsText( xhr.response);
  66. reader.onload=function(event){
  67. opts.success&&opts.success(JSON.parse(event.target.result),xhr);
  68. }
  69. }else if(xhr.status>=700){
  70. // 服务器返回字符串
  71. if(console)console.log(xhr);
  72. var reader = new FileReader();
  73. reader.readAsText( xhr.response);
  74. reader.onload=function(event){
  75. handleError(xhr.status,event.target.result,xhr);
  76. }
  77. }else{
  78. responseError(xhr.status,xhr);
  79. }
  80. }
  81. };
  82. },
  83. log:function(l){
  84. if(console){
  85. console.log(l);
  86. }
  87. }
  88. }
  89. if(!Date.prototype.format){
  90. Date.prototype.format = function(fmt)
  91. {
  92. var zeroize = function (value, length) {
  93. if (!length) length = 2;
  94. value = String(value);
  95. for (var i = 0, zeros = ''; i < (length - value.length); i++) {
  96. zeros += '0';
  97. }
  98. return zeros + value;
  99. };
  100. var o = {
  101. "M+" : this.getMonth()+1, //月份
  102. "d+" : this.getDate(), //日
  103. "H+" : this.getHours(), //小时
  104. "m+" : this.getMinutes(), //分
  105. "s+" : this.getSeconds(), //秒
  106. "q+" : Math.floor((this.getMonth()+3)/3), //季度
  107. "S" :zeroize(this.getMilliseconds()) //毫秒
  108. };
  109. if(/(y+)/.test(fmt))
  110. fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
  111. for(var k in o)
  112. if(new RegExp("("+ k +")").test(fmt))
  113. fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
  114. return fmt;
  115. }
  116. }
  117. return new BinXhr(url);
  118. }