基于考虑jquery太大了,其中ajax部分也占了不少体积的原因,所以还是自己来写个简单的类库,今天花了点时间,加上实现ajax请求模块,实现简单get、post提交、form表单提交功能:
// ajax--start
/**
* 实例化XmlHttpRequest的方法<br />
*
* 返回对象具有如下属性:<br />
* responseBody 将回应信息正文以unsigned byte数组形式返回.只读<br />
* responseStream 以Ado Stream对象的形式返回响应信息.只读<br />
* responseText 将响应信息作为字符串返回.只读<br />
* responseXML 将响应信息格式化为Xml Document对象并返回,只读<br />
* status 返回当前请求的http状态码.只读<br />
* statusText 返回当前请求的响应行状态,只读<br />
*
* 返回对象具有如下方法:<br />
* abort 取消当前请求<br />
* getAllResponseHeaders 获取响应的所有http头<br />
* getResponseHeader 从响应信息中获取指定的http头<br />
* open 创建一个新的http请求,并指定此请求的方法、URL以及验证信息(用户名/密码)<br />
* send 发送请求到http服务器并接收回应<br />
* setRequestHeader 单独指定请求的某个http头
*/
var initXmlHttpRequest = window.ActiveXObject ?
/*
* Microsoft failed to properly implement the XMLHttpRequest in IE7 (can't
* request local files), so we use the ActiveXObject when it is available
* Additionally XMLHttpRequest can be disabled in IE7/IE8 so we need a
* fallback.
*/
function() {
if (window.location.protocol !== "file:") {
try {
return new window.XMLHttpRequest();
} catch (xhrError) {
}
}
try {
return new window.ActiveXObject("MSXML2.XMLHTTP");// Msxml2.XMLHTTP是高版本,受msxml3.dll+支持
} catch (activeError_MSXML2_XMLHTTP) {
try {
return new window.ActiveXObject("Microsoft.XMLHTTP");// Microsoft.XMLHTTP是低本,一般是msxml2.6以下版本使用
} catch (activeError_Microsoft_XMLHTTP) {
}
}
} :
// 其他所有浏览器, 使用标准XMLHttpRequest对象
function() {
return new window.XMLHttpRequest();
};
var doAjax = function(url, method, callbacks, async) {
var xhr = false;
xhr = initXmlHttpRequest();
if (!xhr)
return false;
if (!method || !url || !async)
return false;
xhr.open(method, url, async);
if (method == "POST")
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.onreadystatechange = function() {
/**
* readyState 返回当前请求的状态,只读。定义如下:<br />
* 0 (未初始化) 对象已建立,但是尚未初始化(尚未调用open方法)<br />
* 1 (初始化) 对象已建立,尚未调用send方法<br />
* 2 (发送数据) send方法已调用,但是当前的状态及http头未知<br />
* 3 (数据传送中)已接收部分数据,因为响应及http头不全,
* 这时通过responseBody和responseText获取部分数据会出现错误<br />
* 4 (完成) 数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据<br />
*/
if (xhr.readyState == 1) {// onLoadingInternal
if (callbacks.onLoading != null)
callbacks.onLoading();
}
if (xhr.readyState == 2) {// onLoadedInternal
if (callbacks.onLoaded != null)
callbacks.onLoaded();
}
if (xhr.readyState == 3) {// onInteractiveInternal
if (callbacks.onInteractive != null)
callbacks.onInteractive();
}
if (xhr.readyState == 4) {// onCompleteInternal
if (callbacks.onComplete != null)
callbacks.onComplete();
if (xhr.status == 200) {
if (callbacks.onSuccess != null)
callbacks.onSuccess(xhr.responseText);
}
}
}
if (method == "POST")
xhr.send(this.content);
else
xhr.send(null);
};
// 把form表单格式化为url格式
var serializeForm = function(form) {
var els = form.elements;
var len = els.length;
var queryString = "";
this.addField = function(name, value) {
if (queryString.length > 0) {
queryString += "&";
}
queryString += encodeURIComponent(name) + "=" + encodeURIComponent(value);
};
for ( var i = 0; i < len; i++) {
var el = els[i];
if (!el.disabled) {
switch (el.type) {
case 'text':
case 'password':
case 'hidden':
case 'textarea':
this.addField(el.name, el.value);
break;
case 'select-one':
if (el.selectedIndex >= 0) {
this.addField(el.name, el.options[el.selectedIndex].value);
}
break;
case 'select-multiple':
for ( var j = 0; j < el.options.length; j++) {
if (el.options[j].selected) {
this.addField(el.name, el.options[j].value);
}
}
break;
case 'checkbox':
case 'radio':
if (el.checked) {
this.addField(el.name, el.value);
}
break;
}
}
}
return queryString;
};
jMeteor.extend( { ajax : function(options) {
var ajaxSettings = {};
for (name in options) {
ajaxSettings[name] = options[name];
}
if (options["form"] != null) {
var theform = options["form"];
if (ajaxSettings.url == null)// 如果只定义form,没定义url
ajaxSettings.url = theform.action + "?" + serializeForm(theform);
else {// 如果form和url同时定义,则已url为准//如果form和url同时定义,则已url为准
var s = (ajaxSettings.url.indexOf("?") == -1) ? "?" : "&";
ajaxSettings.url = ajaxSettings.url + s + serializeForm(theform);
}
if (ajaxSettings.type == null)// 如果form和type同时定义,则已url为准//如果form和type同时定义,则已type为准
ajaxSettings.type = theform.method.toUpperCase();
}
ajaxSettings.callbacks = {};
ajaxSettings.callbacks.onLoading = options['onLoading'];
ajaxSettings.callbacks.onLoaded = options['onLoaded'];
ajaxSettings.callbacks.onInteractive = options['onInteractive'];
ajaxSettings.callbacks.onComplete = options['onComplete'];
ajaxSettings.callbacks.onSuccess = options['onSuccess'];
doAjax(ajaxSettings.url, ajaxSettings.type, ajaxSettings.callbacks, true);
},
get : function(url, callbacks) {
return doAjax(url, "GET", callbacks, true);
},
post : function(url, callbacks) {
return doAjax(url, "POST", callbacks, true);
},
form : function(form, callbacks) {
var options = {};
options["form"] = form;
for (name in callbacks) {
options[name] = callbacks[name];
}
return jMeteor.ajax(options);
} });
// ajax--end
调用方法:
function doAjaxGet() {
$.get('http://localhost/test/testAjax.do',
{onSuccess:function(d) { alert("Success:"+d); }});
}
function doAjaxPost() {
$.post('http://localhost/test/testAjax.do',
{onSuccess:function(d) { alert("Success:"+d); }});
}
function doAjaxForm() {
$.form(document.searchFrm,
{onSuccess:function(d) { alert("Success:"+d); }});
}
function doAjaxAjax() {
$.ajax({
type: "GET",
url: "http://localhost/test/testAjax.do",
onLoading:function() { alert("Loading"); },
onLoaded:function() { alert("Loaded"); },
onInteractive:function() { alert("Interactive"); },
onComplete:function() { alert("Complete"); },
onSuccess:function(d) { alert("Success:"+d); }
});
}
// 如果form和url同时定义,则已url为准//如果form和url同时定义,则已url为准
// 如果form和type同时定义,则已url为准//如果form和type同时定义,则已type为准
function doAjaxAjaxForm() {
$.ajax({
type: "GET",
url: "http://localhost/test/testAjax.do?a=3",
form : document.searchFrm,
onLoading:function() { alert("Loading"); },
onLoaded:function() { alert("Loaded"); },
onInteractive:function() { alert("Interactive"); },
onComplete:function() { alert("Complete"); },
onSuccess:function(d) { alert("Success:"+d); }
});
}
现在只是实现一些简单功能,以后再改进改进。
分享到:
相关推荐
原生javascript实现ajax发送pos请求,这样可以脱离jquery框架,
这意味着我们不能在 Webview 中干涉 JavaScript 发起的 HTTP 请求,而有时候我们确实需要能够截获 Ajax 请求并实现一些功能,如统一的网络请求管理、 Cookie 同步、证书校验、访问控制等。 那么,我们可以转换思路...
在Java中,你可以使用Spring MVC、Servlet或其他Web框架来创建RESTful API,接收前端的Ajax请求并返回数据。 例如,Java后端可能会有这样一个方法: ```java @GetMapping("/data") public ResponseEntity<Object> ...
所以接下来便用原生JavaScrpit实现一个简单的Ajax请求,并说明ajax请求中的跨域访问问题,以及多个ajax请求的数据同步问题。 JavaScript实现Ajax异步请求 简单的ajax请求实现 Ajax请求的原理是创建一个...
通常,这样的博客会包含如何创建和使用AJAX请求的步骤,以及可能遇到的问题和解决方案。 **标签解析:** "源码"标签暗示我们将看到实际的JavaScript代码,这对于学习和理解AJAX的工作原理至关重要。"工具"可能指的...
Ajax Hook允许我们捕获并修改发送到服务器的Ajax请求以及接收到的响应,从而增强我们的应用功能。 首先,我们需要理解Ajax请求的基本原理。Ajax,即异步JavaScript和XML,是一种创建动态网页的技术。它允许我们在不...
jQuery是一个强大的JavaScript库,它简化了DOM操作,事件处理,动画效果以及,当然,包括AJAX请求。使用jQuery的$.ajax()函数,我们可以轻松地发起异步请求: ```javascript $.ajax({ url: 'your_server_endpoint'...
本示例"Jquery跨域Ajax请求测试"将详细讲解如何利用jQuery实现这一功能。 首先,了解同源策略是理解跨域问题的关键。同源策略是浏览器为了保障用户安全而设定的一项机制,它规定了只有来自同一协议、同一域名和同一...
开发者可以通过过滤功能只显示Ajax请求,从而更方便地查看和分析。 此外,Chrome的"Chrome DevTools Protocol"也允许开发者通过编写自定义的Chrome扩展来获取Ajax请求记录。这个协议提供了一套JSON-over-WebSocket ...
javascript发送ajax请求,获取返回值res,async 同步/异步 var res = sendRequest({ url : "1.php", //necessary method : "post", params : { param1 : "123", param2 : "234" }, async : false });
8. **错误处理与调试**:学习如何有效地处理JavaScript和Ajax请求中的错误,以及使用浏览器的开发者工具进行调试,是提升开发效率和代码质量的重要环节。 9. **jQuery与Ajax**:jQuery是一个流行的JavaScript库,...
综上所述,"Java通过jQuery实现ajax异步请求"的示例工程涵盖了客户端与服务器端的交互流程,包括使用jQuery发起AJAX请求、Java后端处理请求并返回数据,以及数据格式的转换和错误处理。了解并掌握这些知识点,对于...
在提供的压缩包文件中,`ext-basex.js`可能是ExtJS库的一个组成部分,包含了对Ajax请求等基础功能的支持。这个文件可能包含了实现同步请求的必要代码,但具体使用时还需要结合其他组件和配置。 总的来说,虽然同步...
最后,实践编写 AJAX 请求,结合服务器端脚本,实现实际的交互功能。 **进阶知识** 1. **jQuery**:一个流行的 JavaScript 库,简化了 DOM 操作和 AJAX 调用,加速开发进程。 2. **Promise 和 async/await**:现代 ...
本示例代码着重于使用纯 JavaScript 实现这一功能,无需依赖任何外部库,如 jQuery 或其他 AJAX 库。 在传统的网页交互中,用户必须等待整个页面加载完成才能看到更新的内容,而 AJAX 提供了一种更加高效和用户友好...
这些是原生JavaScript实现Ajax请求的基本方法。通过这些方法,开发者可以实现简单的异步数据交互。需要注意的是,随着前端技术的发展,出现了许多现代化的库和框架(如jQuery、Fetch API等),它们提供了更简洁、更...
本篇文章将详细讲解如何利用AJAX和JavaScript在网页上实现一个基本的留言功能。 首先,AJAX的核心在于异步数据交换,它允许网页在不刷新整个页面的情况下与服务器进行通信,提升用户体验。AJAX通过创建...
在JavaScript中,我们可以使用XMLHttpRequest对象或者更现代的fetch API来实现AJAX请求。这里我们将详细讨论`ajax`函数的实现及其工作原理。 首先,我们创建一个名为`ajax`的函数,它接受两个参数:`url`(请求的...
在"AjaxPager"这个文件中,应该包含了实现上述功能的代码示例,包括JavaScript文件(可能包含AJAX请求的逻辑)、服务器端的处理代码(可能是ASP.NET的代码-behind文件)以及相关的HTML或ASP.NET页面结构。...