自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一個比較方便通用的自定義Ajax函數(shù)

開發(fā) 前端
這里介紹的一個自定義Ajax函數(shù),是作者自己摸索出來的。在JQuery調(diào)用中可能會出現(xiàn)undefinde的錯誤,希望大家能熱烈討論下。

function Ajax()  
{  
    var len=arguments.length;  
    var type,url,postdata,fn;  
    if(len<2)  
    {  
   alert('沒有2個一下參數(shù)的重載,至少必須指定請求類型(type)和url地址!');  
   return;  
    }  
    type=arguments[0];  
    url=arguments[1];  
    if(len>2)  
    {  
   var args=arguments[2];  
   if(typeof(args)=="string")  
   {  
  postdata=args;  
   }  
    }  
    var xhr = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();  
    xhr.open(type,url,true);  
    xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");  
    fn = arguments[len-1];  
    xhr.onreadystatechange = function (){  
   if(xhr.readyState==4)  
   {  
 if(xhr.status==200)  
 {  
 if(typeof(fn)=="function")  
fn(xhr.responseText);  
 }  
 else 
 {  
   alert("你所請求的頁面有異常");  
 }  
   }  
    };  
    xhr.send(postdata);  
 }  
 
 function Test()  
 {  
    Ajax("get","/WebRoot/servlet/TestAjax");  
    Ajax("get","/WebRoot/servlet/TestAjax",function (date){  
   alert("Get Date:\n"+date);  
    });  
    Ajax("post","/WebRoot/servlet/TestAjax");  
    Ajax("post","/WebRoot/servlet/TestAjax",function (date){  
   alert("Post Date:\n"+date);  
    });  
    Ajax("post","/WebRoot/servlet/TestAjax","username=jonllen&pwd=123456",function (date){  
   alert("Post Date:\n"+date);  
    });  
 } 

function Ajax()
{
    var len=arguments.length;
    var type,url,postdata,fn;
    if(len<2)
    {
   alert('沒有2個一下參數(shù)的重載,至少必須指定請求類型(type)和url地址!');
   return;
    }
    type=arguments[0];
    url=arguments[1];
    if(len>2)
    {
   var args=arguments[2];
   if(typeof(args)=="string")
   {
  postdata=args;
   }
    }
    var xhr = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
    xhr.open(type,url,true);
    xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    fn = arguments[len-1];
    xhr.onreadystatechange = function (){
   if(xhr.readyState==4)
   {
 if(xhr.status==200)
 {
 if(typeof(fn)=="function")
fn(xhr.responseText);
 }
 else
 {
   alert("你所請求的頁面有異常");
 }
   }
    };
    xhr.send(postdata);
 }

 function Test()
 {
    Ajax("get","/WebRoot/servlet/TestAjax");
    Ajax("get","/WebRoot/servlet/TestAjax",function (date){
   alert("Get Date:\n"+date);
    });
    Ajax("post","/WebRoot/servlet/TestAjax");
    Ajax("post","/WebRoot/servlet/TestAjax",function (date){
   alert("Post Date:\n"+date);
    });
    Ajax("post","/WebRoot/servlet/TestAjax","username=jonllen&pwd=123456",function (date){
   alert("Post Date:\n"+date);
    });
 }

就只有一個函數(shù)Ajax,調(diào)用的例子是Test(),由于JavaScript的函數(shù)申明不需要固定參數(shù),能實(shí)現(xiàn)動態(tài)獲取傳遞,利用這點(diǎn)我們能實(shí)現(xiàn)類似與C#或Java里面的重載,并且我們能根據(jù)傳入?yún)?shù)的類型和數(shù)量進(jìn)行特別的判斷,而執(zhí)行不同的操作。上述Ajax函數(shù)里就用到判斷當(dāng)***一個傳入的參數(shù)是函數(shù)類型的時候我們就認(rèn)為是這個是Ajax回調(diào)函數(shù),如果是字符串類型的話就認(rèn)為是postData,這樣我們就能實(shí)現(xiàn)動態(tài)傳遞可選參數(shù),也就是說你可以加上function(data){alert(date);}就會自動在Ajax加載返回的回調(diào)該函數(shù),如果沒有就不調(diào)用。

在JQuery里面,我們大多會用到對象的prototype屬性,并也可實(shí)現(xiàn)可選參數(shù)默認(rèn)構(gòu)造函數(shù)來實(shí)例對象,形如:

var Ajax = {    
    url : location.href,  
    type : "post",  
    send : function ()  
    {  
   alert (this.type);  
    }  
};  
Ajax.send();  
alert( Ajax.url ); 

var Ajax = {
 url : location.href,
 type : "post",
 send : function ()
 {
  alert (this.type);
 }
};
Ajax.send();
alert( Ajax.url );    于是,JQuery便能這樣調(diào)用Ajax:

Java代碼

$.ajax({   
  type: "GET",  
  url: "test.js",  
  dataType: "script" 
});  

$.ajax({
  type: "GET",
  url: "test.js",
  dataType: "script"
});

不過我對整個JQuery框架的源碼還有一些疑問,當(dāng)我想自己來實(shí)現(xiàn)像JQuery這樣來調(diào)用的Ajax請求函數(shù)的時候遇到了一些問題,我想在對象構(gòu)造函數(shù)里面再加上一層構(gòu)造函數(shù)缺省值,卻獲得不了構(gòu)造函數(shù)參數(shù)的值,調(diào)用不報(bào)什么錯誤,就是獲取到的值都是undefinde,可能是我還未了解JavaScrit里面一些更深奧的東西吧。。。^_^

上面我寫的Ajax函數(shù)也能動態(tài)判斷指定參數(shù)的功能,實(shí)現(xiàn)很簡單就是根據(jù)傳入的arguments數(shù)量和類型來判斷的,所以我們在調(diào)用的時候能像在Test里面有多種參數(shù)調(diào)用的方式,方便實(shí)用。當(dāng)我們不需要用到整個JQuery框架或只要用Ajax的時候就嵌入這一段函數(shù)就有了,更重要的是自己寫的不會造成跟其他的產(chǎn)生沖突。

以上我寫的Ajax的函數(shù)在IE6、FF2.0、Chrome內(nèi)測試都正常,請求的服務(wù)器端是Servlet,都能正常的返回結(jié)果。注意:當(dāng)post過去有中文的時候postData數(shù)據(jù)***先單個針對中文進(jìn)行encodeURI(postData)URL編碼,Ajax請求post的時候都是以UTF-8編碼格式發(fā)送的,確保服務(wù)器端和客戶端編碼一致,這樣就不會出現(xiàn)中文亂碼問題。

【編輯推薦】

  1. 使用Java開發(fā)Google APP Engine初試
  2. 橫向技術(shù)分析C#、C++和Java優(yōu)劣
  3. Java開發(fā)者需要注意的十條法則
責(zé)任編輯:彭凡 來源: javaeye
相關(guān)推薦

2021-01-06 05:25:56

項(xiàng)目Springboot應(yīng)用

2012-11-19 11:07:42

IBMdw

2022-06-06 09:28:36

ReactHook

2010-10-25 16:05:07

oracle自定義函數(shù)

2021-03-09 15:23:45

鴻蒙HarmonyOS應(yīng)用開發(fā)

2020-09-18 10:12:24

KotlinTCP網(wǎng)絡(luò)協(xié)議

2010-09-14 16:47:23

SQL自定義函數(shù)

2009-09-03 10:08:27

JavaScript自

2009-02-10 12:55:39

自定義控件AJAX.NET

2010-05-11 13:16:21

Unix awk

2021-06-16 17:46:55

函數(shù)指針結(jié)構(gòu)

2017-06-20 12:48:55

React Nativ自定義模塊Note.js

2010-09-14 16:59:39

SQL自定義函數(shù)

2023-10-31 09:10:39

2024-08-01 17:20:55

2018-03-16 08:41:16

Oracle存儲函數(shù)

2011-05-17 13:32:04

oracle

2015-03-26 11:51:22

2010-09-06 15:41:34

SQL函數(shù)存儲過程

2015-02-12 15:33:43

微信SDK
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號