我在开发时候用到IC卡签到考勤,但系统是B/S架构的,我想实现的场景是,只要用户登录打开引入OCX的这个页面,持有IC卡的人直接依次从读卡器上自动完成刷卡功能,C/S具有多线程,可很顺手的实现自动,但B/S中加入硬件都采用JS调用的OCX中接口,我纠结了很久,不知道怎么在JS中实现页面自动调用我的读卡函数,想采用js中的SetTimeOut(),总认那不合适,寻求能者建谋,能够给我帮助,或是与我交流。
我的读卡js程序如下:<script type="text/javascript" language="javascript">
        
        var wsrx = new ActiveXObject("WSRX.WSR.1");
        var ret=0;
        var portno=0;
        var CardNo="";
        
        function getCardNo()
        { 
 //打开串口
ret=wsrx.aws_openPort(portno); //参数:   1: 串行COM1口
            if (ret>=0)
            {
                    wsrx.aws_loadKey_Hex(portno,"FFFFFFFFFFFF",0);
                    ret=wsrx.aws_readBlock_Hex(portno,0);
                    if (ret>=0)
                    {
                           //获取卡号
                var cardno="";
                            ret=wsrx.aws_getCardNo_String(portno); //获取卡号
                            
                            if (ret>=0)
                            {
                    cardno=wsrx.aws_getCardNo();
                               CardNo= String(cardno);
                            wsrx.aws_beep(portno);//蜂鸣                   
                        wsrx.aws_closePort(portno); //关闭串口
                        if(document.forms["form1"].ChkSms.checked==true)
                        {
                            window.location.href("AttendanceSubmit.aspx?CardNO="+CardNo+"&Send=1");//我目前的实现是用户点击考勤按钮传参到另一页面处理
                        }
                        else
                        {
                            window.location.href("AttendanceSubmit.aspx?CardNO="+CardNo+"&Send=0");//我目前的实现是用户点击考勤按钮传参到另一页面处理
                        }
                        //window.location.href("");
                            }
                            else
                            {
                    document.getElementById("lblMsg").innerText = "错误:读卡号失败!";
                    wsrx.aws_closePort(portno); //关闭串口
                            }
                         }
                         else
                         {
                            document.getElementById("lblMsg").innerText = "错误:请安放匹配机型的IC卡!";
                            wsrx.aws_closePort(portno); //关闭串口
                         }
            }
            else
            {
      document.getElementById("lblMsg").innerText = "错误:串口打开失败!";
            }
        }
</script>

解决方案 »

  1.   

    JS下现成的多线程模拟只有SetTimeOut()或者SetInternal()。
      

  2.   

    js没有多线程
    即使是setTimeout setInternal
    来定时执行也只是模拟
    实际也还是要排队
    所以没有什么具体搞法
    你就直接用setTimeout来设定几秒后执行就可以了
      

  3.   

    JS多线程,无法实现,但可以通过,setTimeout和setInternal模拟网络上有些牛人写出了模拟JS线程,你可以百度一下看看
      

  4.   

    没我中意的答案,我自己顶,寻求良方啊!setTimeout和setInternal其实是不行的.....
    同志们,统一战线的咋这么少呢?