网络
传统的Web应用允许用户端填写表单(form),当提交表单时就向网页服务器发送一个请求。服务器接收并处理传来的表单,然后送回一个新的网页,但这个做法浪费了许多带宽,因为在前后两个页面中的大部分HTML码往往是相同的。由于每次应用的沟通都需要向服务器发送请求,应用的回应时间依赖于服务器的回应时间。这导致了用户界面的回应比本机应用慢得多。
AJAX即“Asynchronous JavaScript and XML”(异步的JavaScript与XML技术),指的是一套综合了多项技术的浏览器端网页开发技术。Ajax的概念由杰西·詹姆士·贾瑞特所提出。
Ajax 技术的核心是 XMLHttpRequest 对象(简称 XHR),这是由微软首先引入的一个特性,其他 浏览器提供商后来都提供了相同的实现。在 XHR 出现之前,Ajax 式的通信必须借助一些 hack 手段来实 现,大多数是使用隐藏的框架或内嵌框架。XHR 为向服务器发送请求和解析服务器响应提供了流畅的 接口。能够以异步方式从服务器取得更多信息,意味着用户单击后,可以不必刷新页面也能取得新数据。 也就是说,可以使用 XHR 对象取得新数据,然后再通过 DOM 将新数据插入到页面中。另外,虽然名 字中包含 XML 的成分,但 Ajax 通信与数据格式无关;这种技术就是无须刷新页面即可从服务器取得数 据,但不一定是 XML 数据。
状态码
当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。HTTP状态码的英文为HTTP Status Code。
下面是常见的HTTP状态码:
200 - 请求成功
301 - 资源(网页等)被永久转移到其它URL
404 - 请求的资源(网页等)不存在
500 - 内部服务器错误
method
要使用的HTTP方法,比如「GET」、「POST」、「PUT」、「DELETE」、等。对于非HTTP(S) URL被忽略。
- GET 方法的首要目的是 获取资源
- POST 方法的首要目的是 提交,POST 方法一般用于添加资源
- PUT 对后台来说 PUT 方法的参数是一个完整的资源对象,它包含了对象的所有字段
- PATCH 对后台来说 PATCH 方法的参数只包含我们需要修改的资源对象的字段
- DELETE 方法一般用于删除资源
XMLHttpRequest
XMLHttpRequest 是 HTML 原生的网络请求对象 - XHR
使用示例:
const URL = 'https://query.yahooapis.com/v1/public/yql?format=json&q=select%20*%20from%20weather.forecast%20where%20woeid=2459115';
function _XHR(method, url, datas,success) {
var xhr = new XMLHttpRequest();
xhr.open(method, url, true);
var formData = new FormData();
for(var key in datas){
formData.append(key, datas[key]);
}
xhr.onerror = function(xhr, status, text) {
console.log(xhr, status, text);
};
xhr.onreadystatechange = function(response) {
if (xhr.readyState == 4 && xhr.status == 200 && xhr.responseText != "") {
typeof success === 'function' && success(JSON.parse(xhr.response))
} else if (xhr.status != 200 && xhr.responseText) {
console.log(xhr, xhr.status, xhr.responseText);
}
};
xhr.send(formData);
}
_XHR('GET',URL,{},(res)=>{
console.log(res)
})
Fetch
Fetch API 提供了一个获取资源的接口(包括跨域)。任何使用过 XMLHttpRequest 的人都能轻松上手,但新的API提供了更强大和灵活的功能集。
使用示例
const URL = 'https://query.yahooapis.com/v1/public/yql?format=json&q=select%20*%20from%20weather.forecast%20where%20woeid=2459115';
fetch(URL)
.then(function(response) {
return response.json();
})
.then(function(myJson) {
console.log(myJson);
});
axios
Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。 - 文档
使用示例:
- HTML 需要引用 axios 依赖
<script src="https://lib.baomitu.com/axios/0.19.0-beta.1/axios.js"></script>
- JS Request 逻辑
const URL = 'https://query.yahooapis.com/v1/public/yql?format=json&q=select%20*%20from%20weather.forecast%20where%20woeid=2459115';
axios(URL).then(res => {
console.log(res.data)
}).catch( err => {
console.log(err)
})
jQuery
jQuery 执行一个异步的HTTP(Ajax)的请求。 - 文档
使用示例:
- HTML 需要引用 jQuery 依赖
<script src="https://lib.baomitu.com/jquery/3.3.1/jquery.min.js"></script>
- JS Request 逻辑
const URL = 'https://query.yahooapis.com/v1/public/yql?format=json&q=select%20*%20from%20weather.forecast%20where%20woeid=2459115';
$.ajax({
type: 'GET',
url: URL,
data: {},
success: ( res )=>{
console.log(res)
},
error: (err) => {
console.log(err)
}
})