ajax服務器端還有部分內容,我沒有完全理解,所以就直接記錄下客戶端的編成,等理解了回頭繼續記錄下
1,Microsoft AJAX Library
Microsoft Ajax Library就是asp.net ajax的客戶端部分,是一個純客戶端框架,並且提供了javaScript擴展和基礎類庫
2,javaScript的原生類型
Object原生類型:
1, 一個無須的集合,可以存放任意類型的對象.
2, 常作爲字典使用,如: var o=new Object();
o.ItemName="";
o["ItemName"]="";
3, 可以使用for-in遍歷字典中的每一項
4, 禁止擴展其prototype對象
注意: Microsoft Ajax Library並沒有擴展object對象
下面的方法出現在所有對象中,新對象一般都覆蓋了這些方法
1,toString() 得到表示當前對象與環境無有關的字符串
2, valueOf() 返回表示該對象的value
3, hasOwnProperty(prorertyName) 對象上是否直接定義了某個屬性
4, isPrototypeOf(obj) obj是不是當前對象的prototype對象
5,propertyIsEnumerable(properyName) 某屬性是否可遍歷
Object常用方法例子:
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" >
- <head>
- <title>無標題頁</title>
- </head>
- <body>
- <div id="message"></div>
- <script type="text/javascript" language="javascript">
- function display(text){
- document.getElementById("message").innerHTML+=(text+"<br />");
- }
- function useAsDictionary(){
- var o=new Object();
- //倆種賦值方法
- o["name"]="Zhang San";
- o.age=25;
- //倆種取值方法
- display("Name: "+o.name);
- display("Age: "+o["age"]);
- display("---------------------");
- //也可以這麼娶值
- display("Name: "+o["name"]);
- display("Age: "+o.age);
- display("---------------------");
- }
-
- function useForIn(){
- //作爲字典覆值取值
- var oo=new Object();
- for(var i=0;i<10;i++){
- var key="key_"+i;
- oo[key]=Math.random();
- }
- //刪除一個元素
- delete oo["key_5"];
- for( var key in oo){
- display("Key:"+key +", Value: "+oo[key]);
- }
- }
- //函數調用
- useAsDictionary();
- useForIn();
- </script>
- </body>
- </html>
Array原生類型 1,是一個長度可變數組對象的數組對象
2,構造Array對象方法: new Array();定義空數組
new Array(3);長度爲2的數組
new Array(1,"haha");有倆個元素的數組
屬性方法:
length屬性: 數組長度,可讀寫
toString()方法: 返回逗號分割的字符串
concat([item1[,item2[,...]]])方法:返回一個新數組,保存了原數組所有的元素和所有的參數
push([item1[,item2[,...]]])方法:在數組尾添加一個或多個元素
pop()方法:從數組尾去除並返回元素
shift()方法:從數組頭去除並返回元素
unshift([item1[,item2[,...]]])方法:在數組頭添加一個或多個元素
join(separator)方法:返回以separator作爲分隔符得到一個連接所有元素的字符串, 類似StringBuilder加快連接字符串
reverse()方法:將數組內所有元素逆轉
sort(compareFunction)方法:參數爲一個方法,用於比較倆個元素
省略了參數則直接使用<,==,>比較倆個元素
slice(start,end)方法:返回新數組,不影響舊數組
新數組包含從下標start開始到下標end-1的元素
如果省略了end則包含從下標start開始至末尾的所有元素
如果參數爲負數,則表示數組的“倒數”第幾個的下標
如果start元素在end之後或者相同,則返回空數組
splice(start,deletCount[,item1[,item2[,...]]])方法:
最靈活,影響當前數組
從下標start的元素開始,刪除deleteCount個元素,並在當前位置開始插入剩餘參數的元素
刪除元素:splice(2,1) 從第2個元素刪除一個元素
插入元素:splice(2,0,"hello","world") 從第2個元素開始刪除0個元素,並插入倆個元素
替換元素:splice(2,1,"hello","world") 從第2個元素開始刪除1個元素,並插入倆個(也就是說倆個參數替換了刪除掉的那個元素)
使用例子:
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" >
- <head>
- <title>無標題頁</title>
- </head>
- <body>
- <div id="message"></div>
- <script type="text/javascript" language="javascript">
- function display(text){
- document.getElementById("message").innerHTML+=(text+"<br />");
- }
- Array.prototype.display=function(){
- //調用了上面的display方法,然後傳入自己字符串
- window.display("a: "+this);
- }
-
- var a=new Array(1,2,3,4,5);//輸出: a={1,2,3,4,5};
- display("Array Test:");
- //給數組尾添加倆個元素
- display("a.push(6,7)");
- a.push(6,7);//{1,2,3,4,5,6,7}
- a.display();
- //給數組頭刪除一個元素並返回刪除的元素
- display("a.shift():"+a.shift());
- a.display();//{2,3,4,5,6,7}
-
- //給數組頭添加一個元素
- display("a.unshift(8)");
- a.unshift(8);
- a.display();//{8,2,3,4,5,6,7}
-
- //數組末尾刪除一個元素並返回刪除元素
- display("a.pup():"+a.pop());
- a.display();//{8,2,3,4,5,6}
-
- //返回一個新數組包含原數組的元素和參數
-
- display("a.concat(9,10):"+a.concat(9,10)); //{8,2,3,4,5,6,9,10}
- a.display(); //{8,2,3,4,5,6}
-
- //用"]["分割數組
- display("'['+a.join('][')+']':"+"["+a.join("][")+"]");//{[8][2][3][4][5][6]}
- a.display();//原數組不變{8,2,3,4,5,6}
-
- //在原來數組中取新數組
- display("a.slice(2,5):"+a.slice(2,5));//得到新數組{3,4,5}
- display("a.slice(2,-2):"+a.slice(2,-2)); //得到新數組{3,4}
- a.display();//原數組不變{8,2,3,4,5,6}
-
- display("a.splice(3,2):"+a.splice(3,2));//刪除(4,5)
- a.display();//{8,2,3,6}
-
- display("a.splice(2,0,7,8):"+a.splice(2,0,7,8));
- a.display();//{8,2,7,8,3,6}
-
- display("a.splice(3,1,9,10):"+a.splice(3,1,9,10));
- a.display();//{8,2,7,9,10,3}
-
- display("a.sort():"+a.sort());
- a.display();//{10,2,3,6,7,8,9}
-
- display("a.sort(function(x,y){return y-x;})");
- a.sort(function(x,y){return y-x;});
- a.display();//{10,9,8,7,3,2}
-
-
- </script>
- </body>
- </html>
Array原生類的擴展(Microsoft ajax Library)
全都是靜態方法,爲了和其他類庫兼容(Prototype),提供了一些方用的方法主要是對原來類方法的簡單封裝,主要是爲了提供語義良好的方法名。
Array.enqueua(array,item)方法: 入隊列操作,將item添加至array末尾
Array.dequeue(array)方法: 出隊列操作,返回並刪除array的第一個元素
Array.addRange(array,items)方法:將items數組中所有元素添加至array末尾
Array.contains(array,item)方法: 如果array中包含item元素,則返回true,否則返回false
Array.clear(array)方法: 清除array中的所有元素
Array.insert(array,index,item)方法: 將item插入至array中下標爲index的位置
Array.remove(array,item)方法: 從array中移除下標爲index的元素
Array.removeAt(array,index)方法: 從array中移除下標爲index的元素
Array.clone(array)方法: 放回一個與array相同的新數組
Array.parse(value)方法: 將表示數組的json 字符串變爲一個數組對象
Array.indexOf(array,item,start)方法:獲得item在array中的下標,從下標爲start開始查找.如果array中沒有item元素,那麼返回-1
Array.add(array,item)方法:將item添加至array末尾,它和Array.enqueue其實是同一個函數
Array.forEach(array,method,instance)方法: 移instance爲上下文this引用,將array中的每個元素依次作爲參數,循環調用method方法
下面的例子介紹下 Array.forEach()方法:
- <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="AJAXEnabledWebApplication5._Default" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" >
- <head runat="server">
- <title>Untitled Page</title>
- </head>
- <body>
- <form id="form1" runat="server">
- <asp:ScriptManager ID="ScriptManager1" runat="server" />
- <script type="text/javascript" language="javascript">
- function method(elt,index,array){
- this.reslut+="["+index+"."+elt+"]";
- }
- var array="I am Zhang San".split(" ");
- var obj={reslut:""};
- Array.forEach(array,method,obj);
- alert(obj.reslut);
- </script>
- </form>
- </body>
- </html>
Error元生類型
表示錯誤對象 子類有: EvalError,URIError等
捕獲方式:
try{throw new Error()} carch(e){...}
Error對象IE和fireFoc共有屬性: message錯誤信息
特定屬性:
IE:description:同message屬性
number:錯誤編號,只有腳本引擎拋出的錯誤纔有該屬性
FireFox:fileName:創建錯誤的文件
lineNumber:創建錯誤對象的行號
stack:創建錯誤時的堆棧信息
例子: 拋出捕獲顯示錯誤:
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" >
- <head>
- <title>無標題頁</title>
- </head>
- <body>
- <script type="text/javascript" language="javascript">
- function throwError(){
- throw new Error("Custom Error!");
- }
- try{
- throwError();
- }catch(e){
- var errorMsg=("Message:"+e.message+"/n");
- if(!e.stack)//IE
- {
- errorMsg+=("Description:"+e.description+"/n");
- errorMsg+=("Number:"+e.number+"/n");
- }else{
- errorMsg+=("Line Number:"+e.lineNumber+"/n");
- errorMsg+=("File Name:"+e.fileName+"/t/n");
- errorMsg+=("Stack:"+e.stack);
- }
- alert(errorMsg);
- }
- </script>
- </body>
- </html>
Error原生類型的擴展
Error.create(message,errorInfo)方法:創建新的Error對象
將Error對象的message屬性設爲true
將errorInfo上的信息附加到Error對象
Error.prototype.popStackFrame()方法:爲Error對象整理出更優雅的信息對ie無效,方法是返回Error對象而不是拋出則在返回前條用這個方法
例子:
- <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="AJAXEnabledWebApplication5.WebForm1" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" >
- <head runat="server">
- <title>無標題頁</title>
- </head>
- <body>
- <form id="form1" runat="server">
- <div>
- <asp:ScriptManager ID="ScriptManager1" runat="server">
- </asp:ScriptManager>
- <script type="text/javascript" language="javascript">
- function niceError(){
- var e=Error.create("Error Message",{customMessage:"Custom Message"});
- e.popStackFrame();
- return e;
- }
- try{
- throw niceError();
- }catch(e){
- var errorMsg=("Message:"+e.message+"/n");
- errorMsg+=("Line Number:"+e.lineNumber+"/n");
- errorMsg+=("File Name:"+e.fileName+"/t/n");
- errorMsg+=("Stack:"+e.stack);
- alert(errorMsg);
- }
- </script>
- </div>
- </form>
- </body>
- </html>
Function原生類型
與Array,String等類型處於同等地位,每個方法均爲Function類型的實例
如:typeof(Array)==typeof(Function)=="function"
方法調用時候根據發起的對象來確定this上下文的引用:
Function.prototype.apply(instance,args)
Function.prototype.call(instance,[arg1[,arg2[,...]]])
使用例子:
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" >
- <head>
- <title>無標題頁</title>
- </head>
- <body>
- <div id="message"></div>
- <script type="text/javascript" language="javascript">
- function display(text){
- document.getElementById("message").innerHTML+=(text+"<br />");
- }
- function aMethod(){
- var result=this.toString();
- for(var i=0;i<arguments.length;i++){
- result+=(","+arguments[i]);
- }
- return result;
- }
- var a=new String("I am String A");
- var b=new String("I am String B");
- a.aMethod=b.aMethod=aMethod;
- display("aMethod():"+aMethod());
- display("a.aMethod():"+a.aMethod());
- display("b.aMethod():"+b.aMethod());
display("a.aMethod.call(b,1,2,3):"+a.aMethod.call(b,1,2,3));
display("b.aMethod.apply(a,[1,2,3]):"+b.aMethod.apply(a,[1,2,3]));
- </script>
- </body>
- </html>
Function原生類型擴展
Function.createDelegate(instance,method)方法:得到一個方法引用,執行它時則會調用method方法,並保證method方 的上下文飲用爲instance
Function.createCallBack(method,context)方法:得到一個方法引用,執行它時則調用method方法,並將context作爲額外 的參數傳入
例子:
- <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="AJAXEnabledWebApplication5.WebForm2" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" >
- <head runat="server">
- <title>無標題頁</title>
- </head>
- <body>
- <form id="form1" runat="server" >
-
- <asp:ScriptManager ID="ScriptManager1" runat="server">
- </asp:ScriptManager>
- <input id="btn" type="button" value="Click Me--Function.createDelegate" />
- <input id="btn2" type="button" value="Click Me--Function.createCallBack" />
- <script language="javascript" type="text/javascript">
- var obj={
- text:"hello",
- onClick:function(e){
- alert(this.text);
- }
- };
- //直接調用 返回hello
- //obj.onClick();
-
- // $addHandler($get("btn"),"click",obj.onClick);
- var onClickDeleget=Function.createDelegate(obj,obj.onClick);
- $addHandler($get("btn"),"click",onClickDeleget);
-
- var obj2={
- text:"world",
- onClick:function(e,args){
- alert(this.text+" " +args );
- }
- };
- var onClickDelegate2=Function.createCallback(Function.createDelegate(obj2,obj2.onClick),"world");
- $addHandler($get("btn2"),"click",onClickDelegate2);
- </script>
- </form>
- </body>
- </html>