javascript

 
 var payBankSelect = $("#detailStoreEscheatInfofxj").find("[basicType]").eq(0);      html元素中 属性名 basicType <select id =""  basicType ></select>
 
ajax中
dataType: "json"(jsonp的区别)
String callback = request.getParameter("callback" );
response.getWriter().write(callback +"(" +info +")" );
 
 
<li class= "pro-titl" state="040" >
var lis=$("li.pro-titl");根据属性快速筛选元素
$(this).delay(200).hide(0);  //延迟执行
this.value = value.replace(/\s/g,'').replace(/(\d{4})(?=\d)/g,"$1");//清除非数字
 
 
后台判断是否为Ajax调用
beforeSend: function(xhr) {
            xhr.setRequestHeader("dataType", "html");
        },
complete : function(XMLHttpRequest,status){
        if(status == "timeout"){
        ajaxTimeoutTest.abort();
        alert("操作超时!");
        }
        }
后台获取
String requestType = request .getHeader("X-Requested-With" );
String dataType = request.getHeader( "dataType");
 
 
阻止事件冒泡
<span class= 'tipboxNextbtn' onclick='newCardIntroClose(event)' >页面中传入事件
function stopBubble(e){
        var id = e.target.id;
        if (e && e.stopPropagation)
            e.stopPropagation()
        else
            window.event.cancelBubble=true
    }
       
  //$("#run1").one("click",function(){//只执行一次
   //   alert();
   //});
   text() 所有匹配元素文本内容组合起来的文本 html() 取得第一个匹配元素的html内容
 
滚动条到底部再次加载数据
$(window).scroll(function(){
        var pageH = $(document).height();
        var clientH = $(window).height();
        var hideH = $(document).scrollTop();
        if(parseInt(hideH + clientH)  >= (parseInt(pageH)-5)){
            alert("鼠标滚动到底部异步加载数据");
        }
    });
 
var browser=navigator.appName
var b_version=navigator.appVersion
var version=b_version.split(";");
var trim_Version=version[1].replace(/[ ]/g,"");
if(browser=="Microsoft Internet Explorer" && trim_Version=="MSIE6.0")
{
alert("IE 6.0");
}
var browserVersion = window.navigator.userAgent.toLowerCase();
if(browserVersion.indexOf("chrome") > -1){//谷歌浏览器
      $("#wx_scancode_id").attr("width","250").attr("height","250");
}
if(browserVersion.indexOf("msie") > -1){//ie
      $("#wx_scancode_id").css("padding-bottom","10px");
}
 
document.write(Math.round(aa * 100) / 100);    // 2.34    四舍五入  Math.round()舍入为最接近的整数
Number.toFixed(x)截取小数点后x位    
Number.toPrecision(x)截取指定x长度
 
if(/[^a-zA-Z\u4e00-\u9fa5\·]/g.test(userName)){//加上^取反
                    appendError(userId, "姓名格式不正确" );
}
 
**************************************************************jQuery相关**************************************************************
var value = value ? value:"";  //表达式为“”null或undefined就为假  能取到不为空的值就为真   
 function funcV(){
          var i=0,glovalV2 = "ee";//定义多个局部变量
      glovalV="glo";//定义全局变量
 
      }
 
$("#platform-kjzf #bankItem .hover_li").eq(0)  //所选元素集的第一个
$('.kjzf-choosedBank span').first().html("储蓄卡2");
$.each() 方法,此方法可用于例遍任何对象,并对其分别处理
 
 
 
 
var num = /^\d*$/;  //全数字      exec和match区别
 
◎Math.ceil()执行向上舍入,即它总是将数值向上舍入为最接近的整数;
◎Math.floor()执行向下舍入,即它总是将数值向下舍入为最接近的整数;
◎Math.round()执行标准舍入           
 
net.sf.json.JSONArray
类选择器
$("#${fastPayId} .xuan_hd").css("margin-top","0px");
 
父页面   禁止网页后退的两种办法
window.history.forward(1);
新页面
<script type="text/javascript">
    $(window).unload(function(){//离开网页触发的事件
        location.replace(location.href);
    });
</script>
 
$(window).unbind("unload");//解除离开网页触发的事件   在disabledBackspace.js中绑定
 
 
*********************************************javascript**************************************
 
$(document).ready(function() {});  可以在DOM载入就绪能够读取并操纵时立即调用你所绑定的函数
var pageH = $(document).height(); 文档高度
var clientH = $(window).height();  窗口高度
var hideH = $(document).scrollTop(); 相对滚动条顶部的偏移
 
/^\d*$/g   带不带g区别  对于表达式对象的test方法,加入g于不加上g没有什么区别
"<dt style='margin:0;'><i class='spt "+(i != (resultData.length - 1)?'':'bigGreen') +"'></i>";//第一个节点显示bigGreen
 
switch   case  break.....default
 
//点击"跟踪"里面的"展开",动态拼接的元素,父元素div里拼接a
$(".padcursor").delegate("a","click",function(){......
 
 
$("#folderNameInit").data("mycache","mycachevalue");//放缓存
 alert($("#folderNameInit").data("mycache"));//获取缓存
 
this.value = value.replace(/\s/g,'').replace(/(\d{4})(?=\d)/g,"$1");//清除非数字
 
 
闭包函数 避免了大量使用全局变量
var param1;
var closesrc = function(){
    var param1 = "p1";
    return{
        fun1:function(){
            return param1;
        },
        fun2:function(){
            return this;
        }
    }
};
alert(closesrc().fun1()+" "+param1);
 
var bg = function(){
        var i = 0;
        var func = {
        init:function(){
            i = 1;
            return func;
        },
        add:function(){
            i++;
            return func;
        },
        re:function(){
            return i;
        }
        }
        return func;
    };
    alert(bg().init().add().re());

 

--->$.inArray(file,imgArr)指定元素在数组中的位置,变相的用来判断是否包含该元素
var file = "jpg";
var imgArr = ["bmp","jpg","gif","png"];
alert($.inArray(file,imgArr));
--->$.map(array, callback)将一个数组中的元素转换到另一个数组中   
$.map( [0,1,2], function(n){
  return n + 4;
});
--->$.grep(array,callback)过滤数组
$.grep( [0,1,2], function(n,i){
  return n > 0;
});
--->$.parseJSON()接受一个JSON字符串,返回解析后的对象
var obj = jQuery.parseJSON('{"name":"John"}');
alert( obj.name );
--->$.browser.mozilla判断浏览器及版本version 此属性在 DOM 树加载完成前即有效,可用于为特定浏览器设置 ready 事件
ie7 = $.browser.msie && $.browser.version=="7.0",
alert(" mozilla:"+$.browser.mozilla+"  msie:"+$.browser.msie+"   "+$.browser.version);
--->$.isNumeric() 判断是否是数字
--->冒泡事件解决,父div的onclick事件同样会被触发
function sonOver(obj,evt){
    alert(obj.id+" "+evt);
    var e=(evt)?evt:window.event; //判断浏览器的类型,在基于ie内核的浏览器中的使用cancelBubble
    if(window.event){
        e.cancelBubble=true;
    }else{
        e.stopPropagation(); //在基于firefox内核的浏览器中支持做法stopPropagation
    }
}
$("#sonDiv").mousemove(function(event){......
 
--->粘贴内容过多截取
$("#approvalOpinion").bind("paste",function(event){
            var pastedText = undefined||"";
             if (window.clipboardData && window.clipboardData.getData) { // IE
                pastedText = window.clipboardData.getData('Text');
                
             } else {
                pastedText = event.originalEvent.clipboardData.getData('Text');
             }
             if(!pastedText){
                return false;
             }
            
             if(String(pastedText).length > 200){
                //alert("粘贴内容太多!");
                $(this).val(String(pastedText).substring(0, 200));
                return false;                   
             }
  });
 
 
第一步,创建xmlhttprequest对象,var xmlhttp =new XMLHttpRequest();XMLHttpRequest对象用来和服务器交换数据。
第二步,使用xmlhttprequest对象的open()和send()方法发送资源请求给服务器。
第三步,使用xmlhttprequest对象的responseText或responseXML属性获得服务器的响应
第四步,onreadystatechange函数,当发送请求到服务器,我们想要服务器响应执行一些功能就需要使用onreadystatechange函数,每次xmlhttprequest对象的readyState发生改变都会触发onreadystatechange函数。onreadystatechange属性存储一个当readyState发生改变时自动被调用的函数。
readyState属性,XMLHttpRequest对象的状态,改变从0到4,0代表请求未被初始化,1代表服务器连接成功,2请求被服务器接收,3处理请求,4请求完成并且响应准备。
status属性,200表示成功响应,404表示页面不存在。
在onreadystatechange事件中,服务器响应准备的时候发生,当readyState==4和status==200的时候服务器响应准备,表示可以获取服务器响应

收银台支付
1,订单系统通过签名的方式提交orderNo到收银台,通过站点账号匹配收银台(支付方式、及其银行)
2,点击某个银行(收银台、银行、供应商分发)如果配置多个按比例、金额分发 
AtomicInteger轮询--compareAndSet(current,next) 保存next,如果在执行过程中其他线程改变了current,则本次保存不成功,继续循环取值
// 线程安全,以原子方式将当前值加1,注意:这里返回的是自增前的值。
return counter.getAndIncrement();
3,打开供应商页面(支付请求成功),渠道表:渠道支付成功后有页面回调(030支付完成待确认)、异步回调(040支付成功)、050重复支付
支付成功、重复支付都会被支付成功子任务扫到,进而触发通知业务系统定时任务


select * from tbl_pay_supplier_info --支付供应商基本表
select * from tbl_supplier_bank_config -- 供应商关联银行配置表
select * from tbl_supplier_merchant --供应商商户号表
select * from tbl_cashier_config -- 收银台主配置表 100084
select * from tbl_cashier_config_detail ccd where ccd.cashier_code='100084' --收银台配置明细表
select * from tbl_channels_part where cashier_code='100084' --支付渠道分流表

quartz 0/5 * * * * ? 从0秒开始每5秒执行一次 springframework.scheduling.quartz
1,创建Scheduler调度器,根据任务配置表达式建立触发器trigger,创建job信息jobDetail(具体任务处理类A)设置TaskBasicConfig信息
2,具体任务处理类A,实现了Job接口,可以获取TaskBasicConfig信息(数据库中配置,任务处理类名,spring容器中获取实体并执行)
scheduler.scheduleJob(jobDetail, trigger); 任务就会执行
scheduler.rescheduleJob(triggerKey, trigger); 重新设置执行频率


web控制台进行操作来创建exchange和queue,并完成绑定动作
a) 如果是Direct类型,则会将消息中的RoutingKey与该Exchange关联的所有Binding中的BindingKey进行比较,如果相等,则发送到该Binding对应的Queue中。
b) 如果是 Fanout 类型,则会将消息发送给所有与该 Exchange 定义过 Binding 的所有 Queues 中去,其实是一种广播行为 fanout表示分发,所有的消费者得到同样的队列信息
c)如果是Topic类型,则会按照正则表达式,对RoutingKey与BindingKey进行匹配,如果匹配成功,则发送到对应的Queue中
如果消费者绑定同一队列,每个消费者获取不同的消息

  

 
posted @ 2018-05-22 16:53  苍天一穹  阅读(193)  评论(0编辑  收藏  举报