XMLHttpRequest単純パッケージ
12814 ワード
多くの場合、jsライブラリを導入する必要がなく、単純なページを開発する必要があります.この場合、インタフェース要求はXMLhttpRequestオブジェクトに使用される必要があります.では、使いやすい要求方法をカプセル化するのは当然です.以下は私たちが慣れているリクエスト方法です.一緒にパッケージしましょう.
ajaxRequest({
url: '',
method: 'POST',
type: 'json',
data: {},
success: function(res) {
console.log(res)
},
erro: function(err) {
console.log(err)
}
})
function ajaxRequest(option) {
// 1.
if(Object.prototype.toString.call(option) !== '[object, Object]') return undefined;
// 2.
option.method = option.method ? option.method.toUpperCase() : 'GET'; // GET
option.data = option.data || {};
option.type = option.type || 'json';
// 3. GET , data url
var formData = [];
for(key in option.data) { // Object.keys.forEach
formData.push(''.concat(key, '=', option.data[key]))
}
option.data = formData.join('&') //eg: a=b&c=d&e=f
if(option.method === 'GET' && formData.lenght > 0) { // ,option.data ,
// &option.data, ?option.data
option.url += location.search.length === 0 ? ''.concat('?', option.data) : ''.concat('&', option.data);
}
// 4. XMLHttpRequest ,
var xhr = new XMLHttpRequest();
xhr.responseType = option.type;
xhr.withCredentials = false; // Cookie 。
// 5.
xhr.onreadystatechange = function() {
if(xhr.readyState === 4) {
if(xhr.status === 200) {
if(option.success && typeof option.success === 'function') {
option.success(xhr.response)
}
} else {
if(option.error && typeof option.error === 'function') {
option.error(new Error(xhr.statusText))
}
}
}
}
xhr.open(option.method, option.url, true); // true
// 6. POST ,
if (option.method === 'POST') {
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
}
// 7.
xhr.send(option.method === 'POST' ? option.data : null);
}