04
JAVASCRIPT 中文數字的涵式
function chineseNum(numstr){
numArray='零,一,二,三,四,五,六,七,八,九,十'.split(',');
decimalArray='個,十,百,千,萬,十,百,千,億,十,百,千,兆'.split(',');
tmpstr=new String();
for(counti=0;counti<numstr.toString().length;counti++){
decimalPlace=numstr.toString().length-counti-1;
if(!(decimalPlace==2 && numstr.toString().charAt(counti)!=1 && numstr.toString().length==2) && numstr.toString().charAt(counti)!=0){
tmpstr+=numArray[numstr.toString().charAt(counti)];
}
if(decimalPlace>0 ){
tmpstr+=decimalArray[decimalPlace];
}
}
return tmpstr;
}
04
AJAX 在ie和ff接xml格式
response=req.responseText.replace(/^\s+|\s+$/g,""); //1.先把接收的xml(文字格式)前後去空格
if (window.ActiveXObject){ //2.先檢查是否是ie,window.ActiveXObject是ie獨有的物件,在把接收的文字格式轉xml物件
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.loadXML(response);
}else{ //3.不是ie我暫時認定是firefox,就把接收的文字格式轉xml物件
parser=new DOMParser();
xmlDoc=parser.parseFromString(response,"text/xml");
}
注釋;
1. 先把接收的xml(文字格式)前後去空格
Firefox對於xml格式的要求是很嚴格的,xml前後不可有空格,如有空格,該xml文字就不能轉成xml格式了
2. 先檢查是否是ie,window.ActiveXObject是ie獨有的物件,在把接收的文字格式轉xml物件
3. 不是ie我暫時認定是firefox,就把接收的文字格式轉xml物件。
以上的程式碼可以解決firefox和ie在ajax接收xml格式資料的差異性
fongyoung的ColdFusion心得分享http://www.wretch.cc/blog/fongyoung/10459643
06
coldfusion中Hash()函數的應用
今天一開qq就發現群裏的michek提問。
一个md5加密问题php版本:
<?php
$salt = "8092d2";
$password = 123456;
$pass = md5(md5($password).$salt);
echo "$pass";
?>
算出来的ok;
cfm版本的算出来不ok:
<cfset salt = "8092d2">
<cfset password = 123456>
<cfset pass = hash(hash(#password#)&#salt#)>
<cfoutput>#pass#</cfoutput>
why,很多人也會覺的,在語法上是沒有問題的呀,爲什麽得不到想要的加密字串呢,這是因爲大小寫的問題。由cf的hash函數產生的md5加密字串,你需要考慮它的大小寫,因爲coldfusion的大小寫無須開發者去關注的。所以很多人在使用hash的時候都會忽視大小寫問題。特別是這樣的多重加密,更是需要先轉換成小寫再進行。
所以以上問題,coldfusion的加密版本應該是:
<cfset hashedpwd = lCase(hash(lCase(hash(password)) & salt)) >
04
关于cflock使用的一点心得
最近经常使用到cflock就想说总结下自己使用cflock的心得给大家分享
首先在说cflock使用的时候,我想强调下为什么要使用cflock.
我们都知道sesssion,application,server的变量都有其作用域范围,并互相分享,他们这样命名是因为他们在cf server中运行的时候是被存储在内存中,各自有自己的部分去划分清楚,自己所处的范围.所有对这些变量的读写都是存放在内存中,可以响应服务器中的任何请求.那么为什么使用这些变量时,最好需要加上cflock,是因为cf是一个多线程的server,当这些session,application等变量是可以同时被多个用户访问和使用的,如果不使用cflock去划分清楚每个服务器变量的范围和权限,就有可能出现,当前一个user刚读取完一个变量,后一个user就对这个变量进行了修改value,导致应用程序的混乱,所以我们不可以忽视cflock的重要性.
那么如何正确地去使用cflock也决定了你的应用程序的性能和效率.如何让自己的程序有更好的合理性,我根据自己日常google老外写法和自己的心得,有以下总结:
1.设定服务器级变量
<cflock scope="SERVER" type="EXCLUSIVE" timeout="10">
<cfset server.myservervar="1">
</cflock>
2.读取服务器级变量
<cflock scope="SERVER" type="READONLY" timeout="10">
<cfoutput>#server.myservervar#</cfoutput>
</cflock>
请注意type="EXCLUSIVE" 和scope的属性.一个是定义你变量的操作性,一个是定义变量的作用域,如此不难理解如果需要变量是使用在session时应该这样写:
<cflock scope="SESSION" type="EXCLUSIVE" timeout="10">
<cfset session.mysessionvar="1">
</cflock>
同理application的变量也是一样的道理
<cflock scope="APPLICATION" type="EXCLUSIVE" timeout="10">
<cfset application.myappvar="1">
</cflock>
另外我们要重视怎么让cflock合理的工作,看下面的例子
不合理的demo:
<cflock scope="application" timeout="2" type="exclusive">
<cfquery name="application.qUser" datasource="#request.dsn#">
SELECT FirstName, LastName
FROM Users
WHERE UserID = #request.UserID#
</cfquery>
</cflock>
将cfquery包在lock里面
合理的操作:
1.
<cfquery name="variables.qUser" datasource="#request.dsn#">
SELECT FirstName, LastName
FROM Users
WHERE UserID = #request.UserID#
</cfquery>
<cflock scope="application" timeout="2" type="exclusive">
<cfset application.qUser=variables.qUser>
</cflock>
先设定好cfquery,再将query传给cflock控制的application变量,这才是正确的,两者的区别的就是前者把cfquery的操作放到内存上去执行.后者只是把结果存放到内存中.
2.
<cflock scope="application" timeout="2" type="readonly">
<cfquery name="qUser" datasource="#application.dsn#">
SELECT FirstName, LastName
FROM Users
WHERE UserID = #form.UserID#
</cfquery>
</cflock>
看上面的code,除了出现上面的问题外,大家是否注意到datasource="#application.dsn#",这也是可以改进的地方.虽然application的变量可以使任何页面任意执行和使用.但application变量其实和session变量一样是非常宝贵的,所以在你的application.cfm需要加载很多data的时候,我们可以将常用存储data source的application变量用lock,封锁给一个请求的变量,将其定义为application的作用去,存放在application.cfm中.
<cflock scope="application" timeout="2" type="readonly">
<cfset request.dsn=application.dsn>
</cflock>
<cfquery name="qUser" datasource="#request.dsn#">
SELECT FirstName, LastName
FROM Users
WHERE UserID = #form.UserID#
</cfquery>
另外值的一提的是cfset,这个很平常的tag,大家可能在一定程度上没有很强化的理解这个tag的含义.特别是使用它传递复杂类型数据时,比如struct,array等
特别是用cfset直接赋值application这样共享范围级别的变量.因为cfset无法传送复杂数据类型,遇到struct,array,他只是创建一个指针指向这个存储空间,所以在程序中如果经过多次赋值,那么意味着什么,意味着所有这样的变量都不是实际开放存储空间,而是都指向了application级的变量.所以操作上可以使用cf的复制函数Duplicate()来操作,以释放application.cfm,application变量的压力.
例如:<CFSET request.strDATA=application.strDATA>
可以改正为:<CFSET request.strDATA=Duplicate(application.strDATA)>
03
Adobe又一力作,在綫文檔編輯器
剛上綫就收到charles的email,推薦使用adobe的新作品,在綫文檔編輯器
相對于google document,我感覺它比google的操作更流暢,flex的優點都被發揮了。
沒圖沒真相 ^_^ 在綫試用
