`

模拟jQuery的ajax简单实现

阅读更多
/**
 * @author yli
 * @date 2012-08-15
 */

var XmlHttp = {
	get : "get",
	post : "post",
	reqCount : 4,
	createXhr : function() {
		var xmlhttp = null;
		if (window.XMLHttpRequest) {
			xmlhttp = new XMLHttpRequest();
		} else {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
		return xmlhttp;
	},
	ajax : function(_json) {
		var url = _json["url"];
		var callback = _json["callback"];
		var async = (_json["async"] == undefined ? true : _json["async"]);
		var error = _json["error"];
		var params = _json["params"];
		var method = (_json["method"] == undefined ? XmlHttp.post : _json["method"]).toLowerCase();

		url = XmlHttp.serializeUrl(url);
		params = XmlHttp.serializeParams(params);
		if (method == XmlHttp.get && params != null) {
			url += ("&" + params);
			params = null;	//如果是get请求,保证最终会执行send(null)
		}

		xmlhttp = XmlHttp.createXhr();
		xmlhttp.open(method, url, async);

		if (method == XmlHttp.post) {
			xmlhttp.setRequestHeader("Content-type",
					"application/x-www-form-urlencoded;charset=UTF-8");
		}

		var execount = 0;
		// 异步
		if (async) {
			// readyState 从 1~4发生4次变化
			xmlhttp.onreadystatechange = function() {
				execount++;
				// 等待readyState状态不再变化之后,再执行回调函数
				if (execount == XmlHttp.reqCount) {
					XmlHttp.execBack(xmlhttp, callback, error);
				}
			};
			// send方法要在在回调函数之后执行
			xmlhttp.send(params);
		} else {
			// 同步 readyState 直接变为 4
			// 并且 send 方法要在回调函数之前执行
			xmlhttp.send(params);
			XmlHttp.execBack(xmlhttp, callback, error);
		}
	},
	execBack : function(xmlhttp, callback, error) {
		if (xmlhttp.readyState == 4
				&& (xmlhttp.status == 200 || xmlhttp.status == 304)) {
			callback(xmlhttp);
		} else {
			if (error) {
				error(xmlhttp);
			} else {
				var errorMsg = "no error callback function!";
				if(xmlhttp.responseText) {
					errorMsg = xmlhttp.responseText;
				}
				alert(errorMsg);
				// throw errorMsg;
			}
		}
	},
	serializeUrl : function(url) {
		var cache = "cache=" + Math.random();
		if (url.indexOf("?") > 0) {
			url += ("&" + cache);
		} else {
			url += ("?" + cache);
		}
		return url;
	},
	serializeParams : function(params) {
		var ud = undefined;
		if (ud == params || params == null || params == "") {
			return null;
		}
		if (params.constructor == Object) {
			var result = "";
			for ( var p in params) {
				result += (p + "=" + params[p] + "&");
			}
			return result.substring(0, result.length - 1);
		}
		return params;
	}
};

/*
** 测试
*/

// 执行成功的回调函数
function success(xmlhttp){
	alert(xmlhttp.responseText);
}

//执行失败的回调函数
function error(xmlhttp){
	alert(xmlhttp.responseText);
}

function testAjax() {
	
	// get 请求
	var url = "http://localhost:8080/WebDemo/UserServlet?name=yli&age=21";
	
	XmlHttp.ajax({
		url:url,
		callback:success,			// 成功回调函数,必须要写
		error:error,				// 失败回调函数,可以不写
		async:true,					// 默认就是 true
		method:"get",				// 默认是 post
		params:{p1:"111",p2:"222"}	// 即使是get请求,也可以通过 params 提交参数,会和url的参数合并
	});
	
	// post 请求
	// var url = "http://localhost:8080/WebDemo/UserServlet";
	
	// XmlHttp.ajax({
		// url:url,
		// callback:success,			// 成功回调函数,必须要写
		// params:{p1:"111",p2:"222"}	// post请求,参数只能通过params提交
	// });
}

0
1
分享到:
评论

相关推荐

    使用jQuery ajax提交表单代码

    本文将深入探讨如何使用jQuery的ajax方法来提交表单,从而实现异步数据交换,提高用户体验。 首先,jQuery的$.ajax()函数是进行Ajax请求的核心,它允许我们与服务器进行异步数据通信。在“使用jQuery ajax提交表单...

    JQuery+ajax+mock.js模拟注册

    实现JQuery+ajax+mock.js模拟注册,判断输入框是否输入正确

    Iframe模拟Jquery.Ajax

    jQuery,作为一个广泛使用的JavaScript库,提供了简单易用的API来实现Ajax操作。然而,有时我们可能会遇到跨域问题,这是由于浏览器的安全策略限制了不同源之间的通信。在这种情况下,Iframe可以作为一种解决方案,...

    jQuery AJAX 分页

    jQuery通过封装了原生的XMLHttpRequest对象,使AJAX调用变得非常简单。使用`$.ajax()`方法是主要的实现方式: ```javascript $.ajax({ url: 'your_server_page.php', type: 'GET'或'POST', data: {param1: value...

    基于jQuery的Ajax聊天室程序

    【基于jQuery的Ajax聊天室程序】是一个典型的Web交互应用,它利用了Ajax技术来实现实时的、无需页面刷新的用户交流。Ajax(Asynchronous JavaScript and XML)是一种在不重新加载整个网页的情况下,能够更新部分网页...

    php+jQuery+Ajax简单实现页面异步刷新

    JQueryAjax.html中的代码如下: ```html <title>JQueryAjax+PHP</title> <script type="text/javascript" src="https://code.jquery.com/jquery-3.0.0.min.js"></script> 用户名:...

    jquery ajax 分页 前端

    本篇文章将深入探讨如何利用jQuery和AJAX技术实现纯前端的分页功能,无需依赖后端服务器支持。 ### 1. jQuery和AJAX简介 jQuery是一个强大的JavaScript库,它简化了DOM操作、事件处理、动画和Ajax交互。AJAX...

    模拟jQuery ajax服务器端与客户端通信的代码

    功能如下: ...运行效果如下:  ...服务器端AjaxServer 代码如下: package com.ljq.test; import java.io.IOException; import java.io.PrintWriter; import java.net.URLDecoder; import javax.se

    Jquery Ajax 图片上传

    在本文中,我们将深入探讨如何使用jQuery AJAX实现图片上传功能,同时结合无刷新预览和加载指示器(Loading)效果。 一、jQuery AJAX基础 在使用jQuery AJAX进行图片上传之前,我们需要了解其基本概念。AJAX代表...

    jquery模拟ajax关闭div窗口效果

    本主题将深入探讨如何使用jQuery模拟AJAX关闭div窗口的效果。这种效果常见于弹窗对话框、提示框或者模态窗口的关闭,提供一种无刷新的用户体验。 首先,我们需要了解基本的HTML结构。一个简单的div窗口可能包含以下...

    IE8 jquery ajax获取静态资源报错TypeError 拒绝访问

    jQuery提供了便捷的$.ajax()函数来实现Ajax请求。然而,当涉及到跨域请求时,即从一个域名下的网页请求另一个域名的数据,浏览器会受到同源策略的限制,这可能导致安全问题。为了解决这个问题,现代浏览器支持CORS...

    ASP.NET jquery ajax无刷新上传文件demo

    ASP.NET、jQuery 和 AJAX 结合使用可以创建动态、无刷新的网页应用,使得用户在上传文件时无需等待页面重新加载,提升用户体验。本教程通过一个名为 "jquery.uploadify.js" 的插件,演示了如何在 ASP.NET 环境下实现...

    ajax实现简单搜索功能(jQuery+aspx)

    **Ajax 实现简单搜索功能:jQuery + ASPX** Ajax(Asynchronous JavaScript and XML)技术允许我们在不刷新整个页面的情况下与服务器进行数据交互,提供更好的用户体验。在这个案例中,我们将使用jQuery库来处理...

    Ajax与jquery相结合实现的无数新验证用户

    【Ajax与jQuery结合实现用户验证】 在网页开发中,实时验证用户输入是提高用户体验的重要手段。Ajax(异步JavaScript和XML)与jQuery的结合,能够实现无刷新验证,使得用户在提交表单前就能得到反馈,避免了不必要的...

    Jquery progressbar通过Ajax请求获取后台进度演示

    在本文中,我们将深入探讨如何使用jQuery Progressbar与Ajax相结合,来实时展示后台处理任务的进度,特别是在一个基于Struts2框架的应用中。这个过程包括前端的jQuery Progressbar组件的设置,以及后端如何发送进度...

    Jquery ajax请求导出Excel表格的实现代码

    知识点二:通过AJAX实现数据请求 在提供的代码片段中,首先定义了一个点击事件处理器($("#btn-export").click(function() {...})),当用户点击id为btn-export的按钮时触发。在这个事件处理器中,我们首先设置了一...

    jquery模拟

    在提供的压缩包文件`msmw_Jquery1.0`中,可能包含的是一个模拟jQuery实现的源码或示例项目,供我们参考和学习。通过阅读和分析这些代码,我们可以更深入地了解模拟jQuery的各种细节和技巧。 总之,jQuery模拟是一个...

    AJAX(jquery)模拟股票涨跌实时显示功能

    总结来说,使用 AJAX 和 jQuery 模拟股票实时显示功能,涉及到前端与后端的数据交互、JSON 数据解析、DOM 操作以及可能的 UI 效果实现。这是一种常见的 web 开发技巧,有助于提升用户体验,避免页面频繁刷新。通过...

    jquery+ajax+jsp+servlet实现二级级联菜单

    本文档将详细介绍如何使用jQuery、Ajax、JSP与Servlet来实现一个简单的二级级联菜单功能。该功能常见于许多Web应用程序中,如用户管理、权限分配等场景。通过这种方式可以有效地组织大量的数据项,提高用户体验。 ...

Global site tag (gtag.js) - Google Analytics