2018-10-23 01:05:09 +03:00
|
|
|
define([], function() {
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
function getFetchPromise(request) {
|
|
|
|
var headers = request.headers || {};
|
|
|
|
"json" === request.dataType && (headers.accept = "application/json");
|
|
|
|
var fetchRequest = {
|
|
|
|
headers: headers,
|
|
|
|
method: request.type,
|
|
|
|
credentials: "same-origin"
|
|
|
|
},
|
|
|
|
contentType = request.contentType;
|
|
|
|
request.data && ("string" == typeof request.data ? fetchRequest.body = request.data : (fetchRequest.body = paramsToString(request.data), contentType = contentType || "application/x-www-form-urlencoded; charset=UTF-8")), contentType && (headers["Content-Type"] = contentType);
|
|
|
|
var url = request.url;
|
|
|
|
if (request.query) {
|
|
|
|
var paramString = paramsToString(request.query);
|
|
|
|
paramString && (url += "?" + paramString)
|
|
|
|
}
|
|
|
|
return request.timeout ? fetchWithTimeout(url, fetchRequest, request.timeout) : fetch(url, fetchRequest)
|
|
|
|
}
|
|
|
|
|
|
|
|
function fetchWithTimeout(url, options, timeoutMs) {
|
|
|
|
return console.log("fetchWithTimeout: timeoutMs: " + timeoutMs + ", url: " + url), new Promise(function(resolve, reject) {
|
|
|
|
var timeout = setTimeout(reject, timeoutMs);
|
|
|
|
options = options || {}, options.credentials = "same-origin", fetch(url, options).then(function(response) {
|
|
|
|
clearTimeout(timeout), console.log("fetchWithTimeout: succeeded connecting to url: " + url), resolve(response)
|
|
|
|
}, function(error) {
|
|
|
|
clearTimeout(timeout), console.log("fetchWithTimeout: timed out connecting to url: " + url), reject()
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
function paramsToString(params) {
|
|
|
|
var values = [];
|
|
|
|
for (var key in params) {
|
|
|
|
var value = params[key];
|
|
|
|
null !== value && void 0 !== value && "" !== value && values.push(encodeURIComponent(key) + "=" + encodeURIComponent(value))
|
|
|
|
}
|
|
|
|
return values.join("&")
|
|
|
|
}
|
|
|
|
|
|
|
|
function ajax(request) {
|
|
|
|
if (!request) throw new Error("Request cannot be null");
|
|
|
|
return request.headers = request.headers || {}, console.log("requesting url: " + request.url), getFetchPromise(request).then(function(response) {
|
|
|
|
return console.log("response status: " + response.status + ", url: " + request.url), response.status < 400 ? "json" === request.dataType || "application/json" === request.headers.accept ? response.json() : "text" === request.dataType || 0 === (response.headers.get("Content-Type") || "").toLowerCase().indexOf("text/") ? response.text() : response : Promise.reject(response)
|
|
|
|
}, function(err) {
|
|
|
|
throw console.log("request failed to url: " + request.url), err
|
|
|
|
})
|
|
|
|
}
|
|
|
|
return {
|
|
|
|
getFetchPromise: getFetchPromise,
|
|
|
|
ajax: ajax
|
|
|
|
}
|
|
|
|
});
|