jQuery的定义了一个ajax过滤器ajaxPrefilter,通过该过滤器可以过滤通过jQuery相应的ajax函数发送的ajax请求。
在项目中,很多地方存在指定开始时间、结束时间来获取该时间区间内某些值随时间变化的过程线的需求,我们可以定义一个通用的ajaxPrefilter来过滤所有ajax请求,当开始时间超过结束时间的时候,便将该ajax请求abort。
1 $.ajaxPrefilter(function (options, originalOptions, jqXHR) { //tm1、tm2表示开始时间、结束时间 2 var requestType, params, startTime, endTime; 3 requestType = (originalOptions.type || "").toUpperCase(); //jsonp的时候type为undefined 4 if (requestType === "GET") { 5 params = originalOptions.data ? $.param(originalOptions.data) : originalOptions.url; 6 } else if (requestType === "POST") { 7 params = $.param(originalOptions.data); 8 } 9 if (params) {10 startTime = params.match(/(^tm1|&tm1)=([^&#]*)/i) ? decodeURIComponent(params.match(/(^tm1|&tm1)=([^&#]*)/i)[2].replace(/\+/g, "%20")) : null;11 endTime = params.match(/(^tm2|&tm2)=([^&#]*)/i) ? decodeURIComponent(params.match(/(^tm2|&tm2)=([^&#]*)/i)[2].replace(/\+/g, "%20")) : null;12 if (startTime && endTime) {13 startTime = startTime.replace(/\-/g, "/");14 endTime = endTime.replace(/\-/g, "/");15 if (new Date(startTime).getTime() > new Date(endTime).getTime()) {16 jqXHR.abort();17 alert("开始时间不能大于结束时间");18 }19 }20 }21 });
通过正则匹配的方式,获得开始时间tm1和结束时间tm2,replace(/\-/g, "/")是将"2015-08-02"这种格式的时间转换为"2015/08/02",不然的话,在ie等浏览器下,不能正确的转换为Date对象。