没有jQuery的香草·阿贾克斯的指南
钥匙要点
- 虽然jQuery可以简化AJAX请求,但并非总是必要的。 Vanilla JavaScript中的Ajax API经历了重大改进,从标准角度来看,XMLHTTPreQuest规范现在被视为一个单一实体,表明社区承诺坚持一个标准。
Ajax是异步JavaScript和XML的简短,AJAX是一种进行部分页面更新的机制。它使您能够使用来自服务器的数据更新页面的部分,同时避免需要进行完整的刷新。以这种方式进行部分更新可以有效地创建流体用户体验,并且可以减少服务器上的负载。
>这就是我们处理服务器的响应的方式:
>
var xhr = new XMLHttpRequest(); xhr.open('GET', 'send-ajax-data.php'); xhr.send(null);
>
对于那些希望更多地了解Ajax基础知识的人,MDN网络有一个很好的指南。到jQuery还是不jQuery?
> 因此,好消息是上述代码将在所有最新的主要浏览器中起作用。坏消息是,它非常令人费解。好!我已经在寻找优雅的解决方案。xhr.onreadystatechange = function () { var DONE = 4; // readyState 4 means the request is done. var OK = 200; // status 200 is a successful return. if (xhr.readyState === DONE) { if (xhr.status === OK) { console.log(xhr.responseText); // 'This is the returned text.' } else { console.log('Error: ' + xhr.status); // An error occurred during the request. } } };
使用jQuery,可以将整个片段浓缩为:
这很好。确实,对于包括您在内的许多人来说,JQuery在Ajax方面已成为事实上的标准。但是,你知道吗?不必是这样。存在jQuery来绕过丑陋的DOM API。但是,真的是
丑陋的吗?还是难以理解?在本文的其余部分中,我想调查对Vanilla JavaScript中Ajax API的改进。可以在W3C上找到整个规范。令我惊讶的是这个规范。它不再是“ xmlhttprequest级别2”,而是“ xmlhttprequest级别1”,这是两个规格之间2011年合并的结果。展望未来,它将从标准的角度将其视为一个实体,而生活水平将被称为XMLHTTPREQUEST。这表明社区有承诺坚持一个标准,这对于想要摆脱jQuery的开发人员而言,这只会意味着好消息。
>
所以让我们开始吧……>
>设置在本文中,我在后端使用node.js。是的,浏览器和服务器上将有JavaScript。 Node.js后端很精美,我鼓励您在Github上下载整个演示并跟随。这是服务器上的肉和土豆:
>这将检查请求URL,以确定应用程序应如何响应。如果请求来自脚本目录,则将适当的文件与应用程序/JavaScript的内容类型一起提供。否则,如果已将请求的X重新抽出标题设置为XMLHTTPRequest,那么我们知道我们正在处理AJAX请求,并且可以做出适当的响应。如果没有这样的情况,则提供文件视图/index.html。
var xhr = new XMLHttpRequest(); xhr.open('GET', 'send-ajax-data.php'); xhr.send(null);
渲染函数异步读取所请求的文件的内容。它通过对HTTPhandler函数的引用,然后将其作为回调执行。 httphandler函数检查是否存在错误对象(例如,如果无法打开所请求的文件)。提供一切都很好,然后使用适当的HTTP状态代码和内容类型为文件的内容提供服务。
>xhr.onreadystatechange = function () { var DONE = 4; // readyState 4 means the request is done. var OK = 200; // status 200 is a successful return. if (xhr.readyState === DONE) { if (xhr.status === OK) { console.log(xhr.responseText); // 'This is the returned text.' } else { console.log('Error: ' + xhr.status); // An error occurred during the request. } } };
喜欢使用任何声音后端API,让我们编写一些单元测试以确保其有效。对于这些测试,我正在呼吁Supertest和Mocha寻求帮助:
这些确保我们的应用程序以正确的内容类型和HTTP状态代码响应不同的请求。安装了依赖项后,您可以使用NPM测试从命令中运行这些测试。
接口
$.ajax({ url: 'send-ajax-data.php', }) .done(function(res) { console.log(res); }) .fail(function(err) { console.log('Error: ' + err.status); });
现在,让我们看一下我们在html中构建的用户界面:
html看起来不错又整洁。如您所见,所有兴奋都在JavaScript中发生。
>>
var xhr = new XMLHttpRequest(); xhr.open('GET', 'send-ajax-data.php'); xhr.send(null);
时,Onload事件才会发射。因此,Onload事件是您可以在几秒钟内充分利用的现代API。现有的事件将有向后兼容。但是,Onload事件应该是您选择的工具。 Onload事件看起来像是JQuery上的成功回调,不是吗?
是时候将5磅的哑铃放在一边,然后移动到手臂卷发了。
如您所见,Vanilla Ajax是灵活而现代的前端API。您可以使用请求标题有很多想法,其中之一是版本化。因此,例如,假设我想支持此Web API的多个版本。这很有用,因为当我不想打破URL并提供一种机制,客户可以选择他们想要的版本。我们可以这样设置请求标头:
>
>您可能想知道,当我与之合作时,为什么ResponseText包含服务器响应,这就是普通的旧json。事实证明,这是因为我没有设置适当的重新定型。此AJAX属性非常适合告诉前端API对服务器对期望的响应类型。因此,让我们充分利用它: a,如果您必须解决这个问题:
>
在没有jQuery vanilla ajax是指使用本机JavaScript创建异步的Web应用程序,而无需依靠JQuery库。尽管JQuery Ajax提供了一种简化的跨浏览器兼容方法来处理Ajax,但Vanilla Ajax可以使您对基础过程有更多的控制和理解。如果您想减少诸如JQuery之类的外部库的依赖关系。 var xhr = new xmlhttprequest(); xhr.send(); >如何监视AJAX请求的进度? >所有现代浏览器都支持
>这样,我们可以在Node.js中进行检查:xhr.onreadystatechange = function () {
var DONE = 4; // readyState 4 means the request is done.
var OK = 200; // status 200 is a successful return.
if (xhr.readyState === DONE) {
if (xhr.status === OK) {
console.log(xhr.responseText); // 'This is the returned text.'
} else {
console.log('Error: ' + xhr.status); // An error occurred during the request.
}
}
};
$.ajax({
url: 'send-ajax-data.php',
})
.done(function(res) {
console.log(res);
})
.fail(function(err) {
console.log('Error: ' + err.status);
});
// app.js
var app = http.createServer(function (req, res) {
if (req.url.indexOf('/scripts/') >= 0) {
render(req.url.slice(1), 'application/javascript', httpHandler);
} else if (req.headers['x-requested-with'] === 'XMLHttpRequest') {
// Send Ajax response
} else {
render('views/index.html', 'text/html', httpHandler);
}
});
var xhr = new XMLHttpRequest();
xhr.open('GET', 'send-ajax-data.php');
xhr.send(null);
xhr.onreadystatechange = function () {
var DONE = 4; // readyState 4 means the request is done.
var OK = 200; // status 200 is a successful return.
if (xhr.readyState === DONE) {
if (xhr.status === OK) {
console.log(xhr.responseText); // 'This is the returned text.'
} else {
console.log('Error: ' + xhr.status); // An error occurred during the request.
}
}
};
根据jQuery文档,它所做的只是将时间戳查询字符串附加到请求的末尾。这使请求有些独特,并破坏了浏览器缓存。发射http ajax请求时,您可以看到这是什么样子:
$.ajax({
url: 'send-ajax-data.php',
})
.done(function(res) {
console.log(res);
})
.fail(function(err) {
console.log('Error: ' + err.status);
});
>希望您喜欢300磅的卧推香草·阿贾克斯(Vanilla Ajax)。一段时间以来,阿贾克斯是一个可怕的野兽,但不再是。实际上,我们涵盖了Ajax的所有基础知识,而没有拐杖,sha骨,jQuery。
这就是响应的样子:
// app.js
var app = http.createServer(function (req, res) {
if (req.url.indexOf('/scripts/') >= 0) {
render(req.url.slice(1), 'application/javascript', httpHandler);
} else if (req.headers['x-requested-with'] === 'XMLHttpRequest') {
// Send Ajax response
} else {
render('views/index.html', 'text/html', httpHandler);
}
});
如何使用vanilla javaScript?
if(xhr.readystate == 4 && xhr.status ===== 200)
console.log(json.parse(xhr.responseText));
}
xhr.send();
>
>我如何处理香草ajax中的错误?可以使用XMLHTTPREQUEST对象的OnError事件处理程序完成xhr.open(“ get”,'https://api.example.com/data',true) 。失败的“);
};
var xhr = new xmlhttprequest();
xhr.send(json.stringify({key:“ value”}));
如何在Vanilla Javascript中取消AJAX请求? >您可以通过调用xmlhttprequest对象的中止方法来取消AJAX请求。这将立即终止请求。
>我可以使用vanilla javascript?>是的,但是不建议这样做,因为它可以阻止脚本的执行并使您的网页无反应互动,但不建议这样做。 。要提出同步请求,请将false作为第三个参数传递到打开的方法。
>
以上是没有jQuery的香草·阿贾克斯的指南的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

Python和JavaScript开发者的薪资没有绝对的高低,具体取决于技能和行业需求。1.Python在数据科学和机器学习领域可能薪资更高。2.JavaScript在前端和全栈开发中需求大,薪资也可观。3.影响因素包括经验、地理位置、公司规模和特定技能。

如何在JavaScript中将具有相同ID的数组元素合并到一个对象中?在处理数据时,我们常常会遇到需要将具有相同ID�...

学习JavaScript不难,但有挑战。1)理解基础概念如变量、数据类型、函数等。2)掌握异步编程,通过事件循环实现。3)使用DOM操作和Promise处理异步请求。4)避免常见错误,使用调试技巧。5)优化性能,遵循最佳实践。

实现视差滚动和元素动画效果的探讨本文将探讨如何实现类似资生堂官网(https://www.shiseido.co.jp/sb/wonderland/)中�...

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

深入探讨console.log输出差异的根源本文将分析一段代码中console.log函数输出结果的差异,并解释其背后的原因。�...
