现在主流的web开发分为前端和后端。
前端是面向用户的一端,即浏览器程序开发(js css html … vue…)。
后端则是为前端提供服务,即服务器程序开发(Node,或者java…)。
前后端操作分为两类:
向服务器提交数据(表单交互)
向服务器查询数据(URL参数交互)
表单交互:
指在HTML中创建一个表单,用户填写表单后提交给服务器,服务器收到表单后返回处理结果。
URL参数交互:
用于浏览器向服务器提交一些请求信息。
例如:http://localhost:3000/index?username=张三&gender=男
从上面的介绍我们可以看出来,基本上前端的数据都需要从后端去获取,那么数据是如何渲染到页面中的呢??同时让用户体验比较好呢?
Ajax:Asynchronous JavaScript And XML,异步JavaScript和XML技术。
在 2005年被Jesse James Garrett提出的新术语,用来描述一种使用现有技术集合的‘新’方法。
包括: HTML 或 XHTML, CSS, JavaScript, DOM, XML, XSLT, 以及最重要的XMLHttpRequest。
使用Ajax技术网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面,这使得程序能够更快地回应用户的操作。
功能: 用于实现与服务器进行异步交互的功能。
原理:
前端和服务器之间交互对于用户来说是无感知的,用户能感知的就是页面内容发送变化了但是页面并没有被刷新
Ajax 的核心是 XMLHttpRequest 对象。
所有现代浏览器都支持 XMLHttpRequest 对象。XMLHttpRequest 对象用于同步后服务器交换数据。这意味着可以更新网页的部分,而不需要重新加载整个页面。
XMLHttpRequest 对象方法描述
方 法 | 描 述 |
---|---|
abort() | 取消当前请求 |
getAllResponseHeaders() | 把HTTP请求的所有响应头部作为键/值对返回 |
getResponseHeader(“header”) | 返回指定首部的串值 |
open(method, url, async, user, psw) | 建立对服务器的调用。method参数可以是GET、POST或PUT。url参数可以是相对URL或绝对URL。这个方法还包括3个可选的参数,是否异步,用户名,密码 |
send()|send(content) | 将请求发送到服务器,send()用于 GET请求 send(content)用于POST 请求 |
setRequestHeader(“header”, “value”) | 设置header并和请求一起发送 ('post’方法一定要 ),在设置任何头部之前必须先调用open()。 |
XMLHttpRequest 对象属性:
属 性 | 描 述 |
---|---|
onreadystatechange | 状态改变的事件触发器,每个状态改变时都会触发这个事件处理器,通常会调用一个JavaScript函数 |
readyState | 请求的状态。有5个可取值:<br>0:请求未初始化<br>1:服务器连接已建立<br>2:请求已收到<br>3:正在处理请求<br>4: 请求已完成且响应已就绪 |
responseText | 服务器的响应,返回数据的文本。 |
responseXML | 服务器的响应,返回数据的兼容DOM的XML文档对象 ,这个对象可以解析为一个DOM对象。 |
responseBody | 服务器返回的主题(非文本格式) |
responseStream | 服务器返回的数据流 |
status | 服务器的HTTP状态码(如:404 = “文件末找到” 、200 =“成功” ,等等) |
statusText | 服务器返回的状态文本信息 ,HTTP状态码的相应文本(OK或Not Found(未找到)等等) |
var xhr = new XMLHttpRequest;
xhr.open('get','http://localhost:8888/test/third?username=zhangsan&age=18');
xhr.send()
xhr.onreadystatechange = function(){
if(xhr.readyState === 4){
if(xhr.status>=200 && xhr.status<300){
var res = xhr.responseText;
// 将json字符串转成json对象
// res = JSON.parse(res)
console.log(res);
}
}
}
var xhr = new XMLHttpRequest;
xhr.open('post', 'http://localhost:7003/test/login');
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send("{'name':'aaa','pass':'aaa'}")
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status >= 200 && xhr.status < 300) {
var res = xhr.responseText;
// 将json字符串转成json对象
// res = JSON.parse(res)
console.log(res);
}
}
}
let form = document.getElementById('form')
//FormData可以一次性获取form表单的全部内容,还可以在手动添加
let formData = new FormData(form)
var xhr = new XMLHttpRequest;
xhr.open('post', 'http://localhost:7003/test/loginForm');
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(formData)
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status >= 200 && xhr.status < 300) {
var res = xhr.responseText;
// 将json字符串转成json对象
// res = JSON.parse(res)
console.log(res);
}
}
}
使用jsonp模式进行跨域,底层原理就是创建script,携带回调函数,只支持get请求
<script>
var script = document.createElement('script');
script.type = 'text/javascript';
// 传参并指定回调执行函数为onBack
script.src = 'http://www.domain2.com:8080/login?user=admin&callback=onBack';
document.head.appendChild(script);
// 回调执行函数
function onBack(res) {
alert(JSON.stringify(res));
}
</script>
其他跨域方式,都是利用第三方技术来完成的,比如nginx,比如Webpack…
使用Ajax 动态添加元素,无法直接进行事件绑定的, 是因为加载顺序的问题,普通js代码是在Ajax获取数据之前就执行完毕了, 所以普通js绑定事件是无法使用的,同时使用选择器也获取不到元素对象的会报错
解决办法: 我们可以通过事件委托的方式监听父级进行绑定子元素就能解决
列:
<div id="add"></div>
<script>
const add = () => {//省略ajax和标签添加操作}
//绑定父元素(已存在的元素)
document.querySelector('#add').addEventListener('click', function (e) {
console.log(e.target.innerHTML);
})
</script>
点赞 -收藏-关注-便于以后复习和收到最新内容有其他问题在评论区讨论-或者私信我-收到会在第一时间回复如有侵权,请私信联系我感谢,配合,希望我的努力对你有帮助^_^
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_45203607/article/details/124319055
内容来源于网络,如有侵权,请联系作者删除!