比較懶,好久沒寫部落格了,昨天遇到個問題隨手記錄一下
以前沒遇到這個問題,一直以為時間戳是可以作為類似於主鍵一樣的唯一標識。直到昨天遇到個老專案,出了個奇怪的bug。
專案是別人做的老專案,我們在修改,昨天測試告知說某輸入框,有時候能輸入東西,有時候內容會被清空。
看了頁面,清空的很明顯是表單驗證控制項型別錯誤,本來該是單純必填的文字
,變成了數字
。問題在於這個有時候會變,有時候不會。
該開始對於問題的定位方向不對,以為是所用外掛程式版本過老,外掛程式的問題。
費老大勁檢視壓縮的**、跟斷點,卻發現所有呼叫控制項的,都是有控制項特定class的元素,並沒有問題,然後懷疑不是外掛程式問題,是呼叫之前就出問題了。
在外掛程式數字控制項numberbox初始化的地方用了console.trace(),檢視呼叫棧
發現第一次非控制項呼叫檔案是utils.js 進去以後檢視**,果然發現了問題
functioninitvalidatebox(parent) ]")[0];
var ntime = new
date().gettime();
$(n).attr("autovali", ntime);
var ecss =;
var csss = $(n).attr("class").split(" ");
$.each(csss,
function
(ci, css)
});if (ecss && ecss.length > 0)
catch
(e)
});}
}});}}
//意識到問題所在,驗證是否正確。把斷點打在這個方法裡,多次觸發,直到出現bug時慢慢跟。頓時發現錯誤原因方法不複雜,關鍵在於下面的幾行**
var ntime = new
date().gettime();
$(n).attr("autovali", ntime);..
.//
原來,在**中時間戳並不唯一。應該是現如今電腦執行速度已經很快,迴圈中兩個相鄰元素加上的時間戳有可能一樣。
這就導致了當迴圈到第二個元素(市場價),給其初始化時,$('[autovali=\"" + $(n).attr("autovali") + "\"]')選擇了兩個元素,
從而導致前乙個元素(屬性名稱)使用的控制項種類(文字),被後乙個元素的控制項種類(數字)覆蓋。也就導致了時隱時現的bug。畢竟並不是每一次迴圈都出現相鄰元素加上的時間戳一樣。
問題找到就好解決了,我選擇最省時省力的
//總結,時間戳並不適合單獨作為唯一標識,尤其是迴圈中加的時間戳$(n).attr("autovali", ntime);
$(n).attr("autovali", ntime + "" + math.floor(math.random()*1000));
//把標識由時間戳,改為時間戳加隨機1-3位的數字
以使用者唯一識別符號與當前時間戳進行DES加密
第一步 編寫tokenproccessor演算法類 初始化引數 public static final string key algorithm des 加密key,長度為8位 public static final string key public static final string pre...
Android唯一標識
github位址 android中能作為唯一標識有四個,但付出一定的代價還是還是能改變,所以目前android中沒有絕對的唯一標識。1 裝置id imei 需要授予許可權 telephonymanager telephonymanager telephonymanager getsystemserv...
全球唯一標識GUID
guid global unique identifier 全域性唯一識別符號,它是由網絡卡上的標識數字 每個網絡卡都有唯一的標識號 以及 cpu 時鐘的唯一數字生成的的乙個 16 位元組的二進位制值。guid 的格式為 xx x x x 其中每個 x 是 0 9 或 a f 範圍內的乙個十六進製制...