项目棘手问题

问题1:在IE高版本浏览器上,测试搜索时调用ajax请求去搜索内容,但却没有显示数据,谷歌下能出来数据?
解决办法:首先先对比他的请求头,响应头的区别,发现没有问题,可以考虑url地址的问题。最后发现是url中出现中文,zaiIE浏览器下不会解析中文,所以把url中的中文
转成utf-8编码格式。
例子:encodeURI(searchNameOrBed)  ===》把搜索的字段转编码
说明:1 .encodeURL函数主要是来对URI来做转码,它默认是采用的UTF-8的编码.
     2. UTF-8编码的格式:一个汉字来三个字节构成,每一个字节会转换成16进制的编码,同时添加上%号.




问题2:在IE浏览器测试发现,通过ajax请求(get方式)过来的数据没有更新?
原因:这是IE的一个bug,IE下的ajax请求是按照ip地址和请求路由进行缓存
解决办法:1.直接在请求的时候在请求链接的末尾自动添加个时间戳或者随机数就OK了


    像上面的话:      /Home/GetMusic?id=new Date()/Math.random()  
2.最好的方法: $.ajax({cache:false}) 
加上cache属性,这样页面中所有的ajax请求时,都执行这个。






问题3:读社保卡时遇到的一系列问题,首先只能在IE内核下才能读,并且在高版本IE中会出现崩溃程序,所以选择了在360浏览器下的IE兼容模式下测试。(,ActiveX只能在IE浏览器运行,也就是<object…>这段代码在firefox等其他浏览器是不能正常工作的)
最开始用了.exe安装了控件,然后使用object标签来引用,但是用服务器打开的地址就不支持这个控件,找不到这个变量下的方法,所以用了js自己创建一个控件,通过他的progId。
(1)用<Object>标签调用ActiveX

  1.  
    <object id="CardAccessor"
  2.  
    classid="clsid:03AD53E8-D7E7-485D-A39A-D07B37DEFBC9"
  3.  
    width="0"
  4.  
    height="0">
  5.  
    </object>



通过.exe程序安装,插件注册成功后,可在注册表中搜索这个clsid找到这个
(2)如果使用第一种办法不行,可以通过javascript的new ActiveXObject来调用ActiveX
如果不知道控件的progId,可以通过clasid在注册表查找,然后就能找到progId(Uprain.CardAccessorCtrl.1)
例子:

var objCard = new ActiveXObject("Uprain.CardAccessorCtrl.1");





上述完成之后,在实际测试过程中还可能遇到两种情况:


   1) 出现“Automation 服务器不能创建对象”异常的并不一定就表示插件没安装,也有可能是因插件未实现初始化或脚本安全接口,从而被IE拦截,需要调整IE“工具-选项-安全-自定义级别”中“ActiveX控件和插件”部分的设置;


   2) 有时候,同样已注册的插件,通过object标签引用的方式能正常调用接口,但通过new ActiveXObject的方式则调用插件接口失败。


   3)在服务器环境下,一定输入IP解析,输入localhost的话可能也会出现“Automation 服务器不能创建对象”








问题4:IE浏览器的时间格式转时间戳兼容问题,也是通过在谷歌和IE反复测试才出来的?
解决办法:(1)如果时间格式为年-月-日,不需要转成年/月/日格式,new Date(str)是识别的。
  var str = '2013-08-30 10:30'; // 日期字符串
  str = str.replace(/-/g,'/'); // 将-替换成/,因为下面这个构造函数只支持/分隔的日期字符串
 (2)如果时间格式为年-月-日 时:分:秒,需要转成年/月/日 时:分:秒格式,如果秒数没给出,则默认为0。


例子:new Date(str)构造了一个日期,参数str至少要提供年月日三部分,也就是形如“2013/03/08”的字符串,不能是"2013/03",否则将得到一个NaN。
此时构造出来的时间是:2013/03/08 00:00:00。同时你还可以传入小时、分钟和秒数,但不能只传入小时,比如“2013/03/08 17”,这样的参数同样会得到一个NaN。
参数可以是“2013/03/08 17:20”或者“2013/03/08 17:20:05”,这样都可以得到正确的时间,其中如果秒数没给出,则默认为0








问题5:在做项目中遇到了一个时间格式的问题,前端显示的时月-日 时:分格式的,要怎么实现,但传给后台要的是时间戳?
解决办法:(1)先把后台请求的时间戳转成年月日时分格式,用另一个变量来存取
 (2)把用于展示的变量,在选取时间时,来转成月日时分格式
 (3)把后台原传来的数据在转成时间戳返给后台


时间控件插件jeDate,使用方法:

  1.  
    jeDate({
  2.  
    dateCell: "#getBeginTime",
  3.  
    format: "YYYY-MM-DD hh:mm",
  4.  
    isinitVal: false,
  5.  
    isTime: true,
  6.  
    isClear: true,
  7.  
    minDate: "1900-01-01 00:00:00",
  8.  
    maxDate: "2099-12-31 23:59:59",
  9.  
    zIndex: 100000,
  10.  
    //选中日期回调
  11.  
    choosefun: function(base) {
  12.  
    //用户后台提交
  13.  
    registerItem.beginTime = base;
  14.  
    //用于页面展示(把年月日时分转成月日时分)
  15.  
    _this.subBeginTime = _this.timeTransfer(base);
  16.  
    },
  17.  
    //点击确定
  18.  
    okfun: function(base) {
  19.  
    //用户后台提交
  20.  
    registerItem.beginTime = base;
  21.  
    //用于页面展(把年月日时分转成月日时分)
  22.  
    _this.subBeginTime = _this.timeTransfer(base);
  23.  
    },
  24.  
    //点击清空
  25.  
    clearfun: function() {
  26.  
    //用户后台提交
  27.  
    registerItem.beginTime = null;
  28.  
    //用于页面展示
  29.  
    _this.subBeginTime = null;
  30.  
    }
  31.  
    });

html部分:

    1.  
      <td>
    2.  
      <input type="text" id="getBeginTime" v-model="registerItem.beginTime" style="display:none;" />
    3.  
      <input type="text" readonly="readonly" @click="getBeginTime(registerItem)" id="getBeginTimex" v-model="subBeginTime" />
    4.  
       
    5.  
      </td>

猜你喜欢

转载自www.cnblogs.com/shan1393/p/9269724.html