`
jonllen
  • 浏览: 63430 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

一个比较方便通用的自定义Ajax函数

阅读更多
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 = { 
	url : location.href,
	type : "post",
	send : function ()
	{
		alert (this.type);
	}
};
Ajax.send();
alert( Ajax.url );

    于是,JQuery便能这样调用Ajax:

$.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编码格式发送的,确保服务器端和客户端编码一致,这样就不会出现中文乱码问题。

4
2
分享到:
评论

相关推荐

    通用FormValid1.0-js验证框架

    修改了当errmsg不存在时出现的问题 修改了如果一个页面存在多个表单的自定义错误显示方式问题 添加了自定义验证成功后处理方式 0.3 加入十几种验证规则 加入自定义正则判断 加入自定义函数判断 加入将焦点移到第一...

    AJAX 源码范例

    08/8.2.9.html 使用abort方法取消一个请求范例 08/8.3.2.html 使用post方法向服务器提交数据范例 08/8.3.3.html 实现服务器相关的二级联动菜单范例 08/a.html 用于ajax获取文件的示例 08/...

    DOYO通用建站系统 v2.3 build20140425.zip

    4、会员、留言、投稿神马一个不能少 不断升级完善的模块与插件,灵活的组装与自定义设置,满足你的多样需求。 5、安装、升级、备份、转移一键完成 一键安装、一键升级、一键备份、一键转移。从此,让你的网站...

    类似于Django的数据分析

    在自定义的Flask项目通用结构(类似于Django)的基础上添加爬虫和数据分析文件夹 /app/: 类似于Django的app文件夹 __init__.py: 声明这个文件夹是一个 python package views.py: 提供渲染网页模板的蓝图 api.py: 提供...

    DOYO通用建站系统 2.3.rar

    4、会员、留言、投稿神马一个不能少 不断升级完善的模块与插件,灵活的组装与自定义设置,满足你的多样需求。 5、安装、升级、备份、转移一键完成 一键安装、一键升级、一键备份、一键转移。从此,让你的网站...

    JAVA上百实例源码以及开源项目

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    yl_linkage_帝国CMS无限联动插件_

    多级联动本插件理论上支持帝国cms任何版本。本插件在帝国CMS7.0正式版{UTF-8}下制作完成,GBK自行转换文件...第一个条目作为提示项,自动选择唯一选项的菜单,设置回调函数在onChange事件触发时获取下拉菜单相关信息。

    JavaScript王者归来part.1 总数2

     6.3.2 函数的所有者--一个为函数指定所有者的例子   6.3.3 动态调用--外来的所有者   6.4 函数常量和闭包   6.4.1 匿名的函数   6.4.2 函数引用   6.4.3 函数参数和函数返回值及其例子   6.4.4 高级...

    asp.net知识库

    .NET关于string转换的一个小Bug Regular Expressions 完整的在.net后台执行javascript脚本集合 ASP.NET 中的正则表达式 常用的匹配正则表达式和实例 经典正则表达式 delegate vs. event 我是谁?[C#] 表达式计算引擎...

    python入门到高级全栈工程师培训 第3期 附课件代码

    06 django的一个简单应用 07 django静态文件之static 08 django的url控制系统 09 django的urlConf补充 第50章 01 django之视图函数的介绍 02 django视图之redirec 03 django模板之变量 04 django模板之过滤器 05 ...

    GraduationProject-2021:2021年毕业设计(计算机科学与技术专业)

    2021年毕业设计(计算机科学与技术专业)项目结构在自定义的Flask项目通用结构(带有Django )的基础上添加爬虫和数据分析文件夹/app/ :DjangoDjango的应用文件夹__init__.py :声明这个文件夹是一个python软件包...

    JAVA上百实例源码以及开源项目源代码

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    php课程(共100多节)

    58:快速设计一个企业网站之BIWEB 59:关于BIWEB常见问题和结构分析 60:PHP与数据库代码开发规范 61:PHP+Mysql新闻系统的开发一 62:PHP+Mysql新闻系统的开发二 63:PHP+Mysql新闻系统的开发三 64:PHP+Mysql新闻...

    ECSHOP网店系统 2.7.3 GBK.rar

    灵活的语言包机制使商家可以方便的扩展更多种语言,把生意做到全球每一个角落。 服务器端运行环境推荐: ·php版本5.0及以上 ·Mysql版本5.0及以上 ·空间安装zend ·空间支持文件锁功能 ·开启GD功能 ·...

    分布式爬虫框架Cola.zip

    所以需要确保以下依赖的安装:PyQt4(&gt;=4.4.3)spynner如果你觉得可以基于cola实现一个比较通用的第三方爬虫,比如说腾讯微博等等,欢迎将此爬虫提交到contrib/中。编写自定义Cola Job见wiki编写自定义Cola Job。架构...

    ASP.NET3.5从入门到精通

    3.2.2 创建一个类和其方法 3.2.3 类成员 3.2.4 构造函数和析构函数 3.3 对象的生命周期 3.3.1 类成员的访问 3.3.2 类的类型 3.3.3 .NET 的垃圾回收机制 3.4 使用命名空间 3.4.1 为什么要用命名空间 3.4.2 创建命名...

    django-libs:Django 项目和应用程序的常用构建块

    一个 JSONResponseMixin 新的基于通用类的视图 DetailViewWithPostAction 能够处理自定义发布操作。 提供字段详细名称的模板过滤器 用于显示当前选择的主导航项的模板标签 自定义 test_email_backend,无论收件人...

Global site tag (gtag.js) - Google Analytics