Form/Ajax

1 XMLHttpRequest

也算比较简单,需要掌握。不要没有 jQuery 就写不出代码,那样很危险。。

// 初始化
let xhr = new XMLHttpRequest();

// 可以增加请求参数
xhr.timeout = 3000;
xhr.reponseType = "text";

// 打开一部请求
xhr.open('POST', '/url', true);

// 发送请求,允许携带请求参数
xhr.send(null);

// 为请求注册回调函数
xhr.ontimeout = {...}
xhr.error = {...}
xhr.onprogress = {...}
xhr.upload.onprogress = {...}
xhr.onload = function (e) {
    if(this.status == 200) {
        alert(this.responseText);
    } else {
        alert(this.statusText);
    }
};

2 Fetch API

旨在取代 XHR 的新标准,目前不是很成熟,但是日常测试使用很方便。

三个接口一个方法: Headers/Request/Response, fetch(),语法简洁。

fetch('/some.json', {
    method: 'get',
    body: { id: 22 }
}).then(function (resp) {
    resp.json().then(console.log);

}).catch(function (r) {
    console.err(r);
});

3 jQuery

语法示例:

$.ajax({
    url: '/xxx',  // 代表请求的服务器地址
    method: 'get|post|put|patch|delete|options', // 使用的请求方法
    headers: {},  // 设置请求头
    async: true|false, // 是否使用异步请求的方式

    contentType: 'application/x-www-form-urlencoded|...', // 请求的 enctype
    data: 'String'|Object|Array, // 传输的数据
    processData: true|false, // 如果 data 是字符串的话不处理,否则调用 $.params(data, tranditional) => 'aaa=222&bbb=333'
    tranditional: false|true,

    dataType: 'json?xml?html?text', // 默认根据 response 头部的信息自动推测
    xhrFields, cache, accepts, contents, crossDomain, conerters, jsonp, mimeType, timeout
}).done((data) => {  // data 的类型,由 dataType 决定
    console.log(json.xxx)
}).fail((xhr, status, err) { // 参数分别是 ajax 原生对象,错误状态,以及错误对象
    console.error(err);
}).always(() => {
    console.log("终于结束了");
});

发送 JSON 到服务器:

$.ajax({
    url: '/xxx',
    method: 'post',
    contentType: 'application/json',
    data: JSON.stringify({
        name: 'xxx', age: 12
    }),
}).done((data) => {  // data 的类型,由 dataType 决定
    console.log(json.xxx)
}).fail((xhr, status, err) { // 参数分别是 ajax 原生对象,错误状态,以及错误对象
    console.error(err);
}).always(() => {
    console.log("终于结束了");
});

发送 FormData 到服务器:

var formData = new FormData();
formData.append("name", "tomcat");

$.ajax({
    url: '/xxx',
    method: 'post',
    contentType: 'multipart/form-data',
    data: formData,
    processData: false // 不要将 formData 转换为 xxx=222&yyy=333 的方式
}).done((data) => {
    console.log(json.xxx)
}).fail((xhr, status, err) {
    console.error(err);
}).always(() => {
    console.log("终于结束了");
});

Author: unname

Created: 2019-03-22 周五 01:32

Go ahead, never stop.