Skip to content

Commit feda753

Browse files
committed
Use Fetch API to send HTTP requests
1 parent 0247cb5 commit feda753

File tree

1 file changed

+65
-54
lines changed

1 file changed

+65
-54
lines changed

ipgeolocation.js

Lines changed: 65 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,44 @@
1-
var _ipgeolocation = function() {
2-
var useSessionStorage = false;
3-
var asyncCall = true;
4-
var hostname = false;
5-
var liveHostname = false;
6-
var hostnameFallbackLive = false;
7-
var security = false;
8-
var userAgent = false;
9-
var ipAddress = "";
10-
var excludes = "";
11-
var fields = "";
12-
var lang = "en";
13-
var tz = "";
14-
var latitude = "";
15-
var longitude = "";
16-
var location = "";
17-
var geolocationEndpoint = "ipgeo";
18-
var timezoneEndpoint = "timezone";
19-
var useragentEndpoint = "user-agent";
20-
var geolocationResponseName = "_ipgeolocation_geolocation";
21-
var timezoneResponseName = "_ipgeolocation_timezone";
22-
var useragentResponseName = "_ipgeolocation_useragent";
1+
const _ipgeolocation = function() {
2+
let useSessionStorage = false;
3+
let asyncCall = true;
4+
let hostname = false;
5+
let liveHostname = false;
6+
let hostnameFallbackLive = false;
7+
let security = false;
8+
let userAgent = false;
9+
let ipAddress = "";
10+
let excludes = "";
11+
let fields = "";
12+
let lang = "en";
13+
let tz = "";
14+
let latitude = "";
15+
let longitude = "";
16+
let location = "";
17+
const geolocationEndpoint = "ipgeo";
18+
const timezoneEndpoint = "timezone";
19+
const useragentEndpoint = "user-agent";
20+
const geolocationResponseName = "_ipgeolocation_geolocation";
21+
const timezoneResponseName = "_ipgeolocation_timezone";
22+
const useragentResponseName = "_ipgeolocation_useragent";
2323

24-
function request(subUrl, callback, apiKey = "") {
24+
async function request(subUrl, callback, apiKey = "") {
2525
if (useSessionStorage) {
26-
if (subUrl == geolocationEndpoint && sessionStorage.getItem(geolocationResponseName) && callback) {
26+
if (subUrl === geolocationEndpoint && sessionStorage.getItem(geolocationResponseName) && callback) {
2727
callback(JSON.parse(sessionStorage.getItem(geolocationResponseName)));
2828
return;
29-
} else if (subUrl == timezoneEndpoint && sessionStorage.getItem(timezoneResponseName) && callback) {
29+
} else if (subUrl === timezoneEndpoint && sessionStorage.getItem(timezoneResponseName) && callback) {
3030
callback(JSON.parse(sessionStorage.getItem(timezoneResponseName)));
3131
return;
32-
} else if (subUrl == useragentEndpoint && sessionStorage.getItem(useragentResponseName) && callback) {
32+
} else if (subUrl === useragentEndpoint && sessionStorage.getItem(useragentResponseName) && callback) {
3333
callback(JSON.parse(sessionStorage.getItem(useragentResponseName)));
3434
return;
3535
}
3636
}
3737

38-
var urlParameters = "";
38+
let urlParameters = "";
3939

4040
if (!subUrl) {
41-
callback(JSON.parse("{'status': 401, message: 'Given path to IP Geolocation API is not valid'}"));
41+
callback(JSON.parse("{'status': 401, 'message': 'Given path to IP Geolocation API is not valid'}"));
4242
return;
4343
}
4444

@@ -59,8 +59,8 @@ var _ipgeolocation = function() {
5959
}
6060

6161
if (hostname || security || userAgent) {
62-
var parameterValue = "";
63-
var hostnameSelected = false;
62+
let parameterValue = "";
63+
let hostnameSelected = false;
6464

6565
if (hostname) {
6666
parameterValue = "hostname";
@@ -105,39 +105,50 @@ var _ipgeolocation = function() {
105105
urlParameters = addUrlParameter(urlParameters, "long", longitude);
106106
}
107107

108-
if (location){
108+
if (location) {
109109
urlParameters = addUrlParameter(urlParameters, "location", location);
110110
}
111111

112-
var httpRequest;
113-
114-
if (window.XMLHttpRequest) {
115-
httpRequest = new XMLHttpRequest();
116-
} else if (window.ActiveXObject) {
117-
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
118-
}
112+
try {
113+
const response = await fetch("https://api.ipgeolocation.io/".concat(subUrl, urlParameters, ""), {
114+
method: "GET",
115+
headers: {
116+
"Accept": "application/json"
117+
}
118+
});
119+
const json = await response.json();
119120

120-
httpRequest.onreadystatechange = function() {
121-
if (this.readyState == 4) {
122-
if (useSessionStorage && this.status == 200) {
123-
key = geolocationResponseName;
121+
if (!response.ok) {
122+
if (callback) {
123+
callback(JSON.parse("{'status': ".concat(response.status, ", 'message': '", json.message, "'}")));
124+
} else {
125+
console.error("status:", response.status, json);
126+
}
127+
}
124128

125-
if (subUrl == timezoneEndpoint) {
126-
key = timezoneResponseName;
127-
}
129+
if (useSessionStorage) {
130+
key = geolocationResponseName;
128131

129-
sessionStorage.setItem(key, this.responseText);
130-
}
131-
132-
if (callback) {
133-
callback(JSON.parse(this.responseText));
132+
if (subUrl === timezoneEndpoint) {
133+
key = timezoneResponseName;
134+
} else if (subUrl === useragentEndpoint) {
135+
key = useragentResponseName;
134136
}
137+
138+
sessionStorage.setItem(key, JSON.stringify(json));
135139
}
136-
};
137140

138-
httpRequest.open("GET", "https://api.ipgeolocation.io/".concat(subUrl, urlParameters, ""), asyncCall);
139-
httpRequest.setRequestHeader("Accept", "application/json");
140-
httpRequest.send();
141+
if (callback) {
142+
callback(json);
143+
}
144+
} catch (error) {
145+
console.error(error);
146+
147+
if (callback) {
148+
callback(JSON.parse("{'status': 400, 'message': 'Something went wrong while query ipgeolocation.io API. If the error persists, contact us at support@ipgeolocation.io'}"));
149+
}
150+
}
151+
141152
}
142153

143154
function addUrlParameter(parameters, parameterName, parameterValue) {

0 commit comments

Comments
 (0)