这里介绍的一个自定义Ajax函数,是作者自己摸索出来的。在JQuery调用中可能会出现undefinde的错误,希望大家能热烈讨论下。

一个比较便利通用的自定义Ajax函数(使用Ajax可带来便捷有)  Ajax 函数 Java 第1张

function Ajax()
{
var len=arguments.length;
var type,url,postdata,fn;
if(len2)
{
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(len2)
{
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);
});
}

就只有一个函数Ajax,调用的比如是Test(),因为JavaScript的函数声明不需求固定参数,能完成动态获取传递,运用这点咱们能完成相似与C#或Java里边的重载,而且咱们能依据传入参数的类型和数量进行特别的判别,而履行不同的操作。上述Ajax函数里就用到判别当***一个传入的参数是函数类型的时分咱们就认为是这个是Ajax回调函数,假如是字符串类型的话就认为是postData,这样咱们就能完成动态传递可选参数,也便是说你能够加上function(data){alert(date);}就会主动在Ajax加载回来的回调该函数,假如没有就不调用。

在JQuery里边,咱们大多会用到目标的prototype特点,并也可完成可选参数默许结构函数来实例目标,形如:

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便能这样调用Ajax:

Java代码

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

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

不过我对整个JQuery结构的源码还有一些疑问,当我想自己来完成像JQuery这样来调用的Ajax恳求函数的时分遇到了一些问题,我想在目标结构函数里边再加上一层结构函数缺省值,却获得不了结构函数参数的值,调用不报什么过错,便是获取到的值都是undefinde,可能是我还未了解JavaScrit里边一些更艰深的东西吧。。。^_^

上面我写的Ajax函数也能动态判别指定参数的功用,完成很简单便是依据传入的arguments数量和类型来判别的,所以咱们在调用的时分能像在Test里边有多种参数调用的方法,便利有用。当咱们不需求用到整个JQuery结构或只要用Ajax的时分就嵌入这一段函数就有了,更重要的是自己写的不会形成跟其他的发生抵触。

以上我写的Ajax的函数在IE6、FF2.0、Chrome内测验都正常,恳求的服务器端是Servlet,都能正常的回来成果。留意:当post曩昔有中文的时分postData数据***先单个针对中文进行encodeURI(postData)URL编码,Ajax恳求post的时分都是以UTF-8编码格局发送的,保证服务器端和客户端编码共同,这样就不会呈现中文乱码问题。

【修改引荐】

  1. 运用Java开发Google APP Engine初试
  2. 横向技能剖析C#、C++和Java好坏
  3. Java开发者需求留意的十条规律
转载请说明出处
知优网 » 一个比较便利通用的自定义Ajax函数(使用Ajax可带来便捷有)

发表评论

您需要后才能发表评论