function Ajax()
{
var len=arguments.length;
var type,url,postdata,fn;
if(len<2)
{
alert('没有2个一下参数的重载,至少必须指定请求类型(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个一下参数的重载,至少必须指定请求类型(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);
});
}
就只有一个函数Ajax,调用的例子是Test(),由于JavaScript的函数申明不需要固定参数,能实现动态获取传递,利用这点我们能实现类似与C#或Java里面的重载,并且我们能根据传入参数的类型和数量进行特别的判断,而执行不同的操作。上述Ajax函数里就用到判断当***一个传入的参数是函数类型的时候我们就认为是这个是Ajax回调函数,如果是字符串类型的话就认为是postData,这样我们就能实现动态传递可选参数,也就是说你可以加上function(data){alert(date);}就会自动在Ajax加载返回的回调该函数,如果没有就不调用。
在JQuery里面,我们大多会用到对象的prototype属性,并也可实现可选参数默认构造函数来实例对象,形如:
var Ajax = { |
Java代码
$.ajax({ |
不过我对整个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编码格式发送的,确保服务器端和客户端编码一致,这样就不会出现中文乱码问题。
新闻标题:一个比较方便通用的自定义Ajax函数
当前网址:http://www.shufengxianlan.com/qtweb/news5/218505.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联