热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

原生js完成Ajax

XMLHttpRequest对象经由历程ActiveXObject完成()newActiveXObject(Microsoft.XMLHTTP)IE5是第一个引入XMLHttpRe

XMLHttpRequest对象

  • 经由历程ActiveXObject完成()

    • new ActiveXObject('Microsoft.XMLHTTP')
    • IE5是第一个引入XMLHttpRequest对象的浏览器;
    • IE5中,XHR对象是经由历程MSXML库中的一个ActiveX对象完成的;
    • IE中可能会碰到3种差别版本的XHR对象,即 MSXML2.XMLHttp.6.0, MSXML2.XMLHttp.3.0, MSXML2.XMLHttp
    • 适用于IE7之前的版本
  • 经由历程XMLHttpRequest组织函数

    • var xhr = new XMLHttpRequest();
    • IE7+、FireFox、Opera、Chrome和Safari都支撑原生XMLHttpRequest对象;

天生XMLHttpRequest对象的要领

function createXHR() {
if (typeof XMLHttpRequest !== 'undefined') {
return new XMLHttpRequest();
} else if (typeof ActiveXObject !== 'undefined'){
// 支撑IE7之前的版本
if (typeof arguments.callee.activeXString !== 'string') {
var versiOns= ['MSXML2.XMLHttp.6.0', 'MSXML2.XMLHttp.3.0', 'MSXML2.XMLHttp'];
for (var i = 0; i try {
new ActiveXObject(versions[i]);
arguments.callee.activeXString = versions[i];
break;
} catch (e) {
//
}
}
}
return new ActiveXObject(arguments.callee.activeXString);
} else {
throw new Error("No XHR Object available!");
}
}

XHR对象的readyState属性

  • readyState 示意要求/相应历程的当前运动阶段;
  • readyState值变化将触发readystatechange事宜,应用该事宜检测每次状况变化后的readyState值;
  • 一般只对readyState值为4的阶段感兴趣,此时一切数据已停当;
  • 为了确保跨浏览器兼容性,必须在挪用open()之前指定readystatechange事宜处置惩罚顺序

readyState属性取值:

阶段申明
0未初始化还没有挪用 open() 要领
1启动已挪用 send() 要领,正在发送要求
2发送send() 要领完成,已收到悉数相应内容
3吸收正在剖析相应内容
4完成相应内容剖析完成,能够在客户端挪用

XHR对象收到相应后增加的属性

属性申明
responseText作为相应主体被返回的文本;
responseXML若相应内容范例是”text/xml”或”application/xml”, 其值包含着相应数据的XML DOM文档;
关于非XML数据而言,responseXML值为null
status相应的HTTP状况
statusTextHTTP状况的申明

封装AJAX要领

/**
*
* @param type 要求范例:get,post,...
* @param url
* @param dataObj 要求参数:对象字面量{key:value,...}
* @param callback
* @param async 是不是异步
*/

function ajax(type, url, dataObj, callback, async) {
var paramsStr = buildParamsStr(dataObj), xhr = null;
if (type === 'get' && dataObj) {
url = addURLParams(url, paramsStr);
}
xhr = createXHR();
xhr.Onreadystatechange= function () {
if (xhr.readyState == 4) {
var status = xhr.status;
if ((xhr.status >= 200 && xhr.status <300) || xhr.status == 304) {
console.log(xhr.responseText);
callback && callback(xhr.responseText);
} else {
console.log("要求非常!状况码:" + xhr.status);
}
}
};
xhr.open(type, url, async); // open()要领启动一个要求以备发送;
if (type == 'get') {
xhr.send(null);
} else {
xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
xhr.send(paramsStr);
}
}

encodeURIComponent()要领

  • GET要求常常发作查询字符串花样激发的毛病;
  • 能够对查询字符串中每一个参数的称号和值用encdoeURIComponent()举行编码;

function buildParamsStr(paramsObj){
var str = '';
for (key in paramsObj) {
// 消除原型中属性
if (dataObj.hasOwnProperty(key)) {
// 对查询字符串中每一个参数称号和值用encdoeURIComponent()举行编码
str += "&" + encodeURIComponent(key) + "=" + encodeURIComponent(paramsObj[key]);
}
}
return str.slice(1);
}

function addURLParams(url, paramsStr) {
url += (url.indexOf('?') === -1) ? '?' : '&';
url += paramsStr + '&' + new Date().getTime();
return url;
}

挪用示例

window.Onload= function(){
var btn = document.getElementById("btn1");
btn.Onclick= function(){
ajax('get', 'a.txt', function fnSucc(str){
alert(str)
});
}
}

推荐阅读
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 利用爬虫技术抓取数据,结合Fiddler与Postman在Chrome中的应用优化提交流程
    本文探讨了如何利用爬虫技术抓取目标网站的数据,并结合Fiddler和Postman工具在Chrome浏览器中的应用,优化数据提交流程。通过详细的抓包分析和模拟提交,有效提升了数据抓取的效率和准确性。此外,文章还介绍了如何使用这些工具进行调试和优化,为开发者提供了实用的操作指南。 ... [详细]
  • 在处理木偶评估函数时,我发现可以顺利传递本机对象(如字符串、列表和数字),但每当尝试将JSHandle或ElementHandle作为参数传递时,函数会拒绝接受这些对象。这可能是由于这些句柄对象的特殊性质导致的,建议在使用时进行适当的转换或封装,以确保函数能够正确处理。 ... [详细]
  • 本文深入探讨了Ajax的工作机制及其在现代Web开发中的应用。Ajax作为一种异步通信技术,改变了传统的客户端与服务器直接交互的模式。通过引入Ajax,客户端与服务器之间的通信变得更加高效和灵活。文章详细分析了Ajax的核心原理,包括XMLHttpRequest对象的使用、数据传输格式(如JSON和XML)以及事件处理机制。此外,还介绍了Ajax在提升用户体验、实现动态页面更新等方面的具体应用,并讨论了其在当前Web开发中的重要性和未来发展趋势。 ... [详细]
  • JavaScript XML操作实用工具类:XmlUtilsJS技巧与应用 ... [详细]
  • 本文探讨了如何通过检测浏览器类型来动态加载特定的npm包,从而优化前端性能。具体而言,仅在用户使用Edge浏览器时加载相关包,以提升页面加载速度和整体用户体验。此外,文章还介绍了实现这一目标的技术细节和最佳实践,包括使用User-Agent字符串进行浏览器识别、条件加载策略以及性能监控方法。 ... [详细]
  • HTML 页面中调用 JavaScript 函数生成随机数值并自动展示
    在HTML页面中,通过调用JavaScript函数生成随机数值,并将其自动展示在页面上。具体实现包括构建HTML页面结构,定义JavaScript函数以生成随机数,以及在页面加载时自动调用该函数并将结果呈现给用户。 ... [详细]
  • 七款高效编辑器与笔记工具推荐:KindEditor自动换行功能解析
    本文推荐了七款高效的编辑器与笔记工具,并详细解析了KindEditor的自动换行功能。其中,轻笔记QingBiJi是一款完全免费的记事本软件,用户可以通过其简洁的界面和强大的功能轻松记录和管理日常事务。此外,该软件还支持多平台同步,确保用户在不同设备间无缝切换。 ... [详细]
  • 如何高效启动大数据应用之旅?
    在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
  • 字节码开发笔记:深入解析与应用技巧 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 为开发者提供了一系列实用的参考网站和资源链接,包括HTML速查手册( 和 ),帮助开发者快速查找和学习相关技术知识。此外,还涵盖了其他重要的开发工具和文档,为编程工作提供全面支持。 ... [详细]
author-avatar
手机用户2502883075
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有