Вставка в get заброс/обновление данных в get запросе
Доброго времени суток читающему.
Написал функцию, функция работает, но выглядит сложновато. А где сложно там и ошибки, и лишний код очень и очень часто встречаются. Итак, форумчане, прошу конструктивной критики:)
function insertIntoGet(key, value) {
var res = '?';
if (location.search.length > 0) {
var search = location.search.substr(1);
var arSearch = search.split('&');
var isHaveKey = false;
arSearch.forEach(function (el, i, arr) {
var arEl = el.split('=');
if (arEl[0] == key) {
arEl[1] = value;
el = (value != "") ? arEl.join('=') : "";
arr[i] = el;
isHaveKey = true;
}
});
res += arSearch.join('&') + (!isHaveKey ? "&" + key + "=" + value : "");
if (res == "?") res = "";
} else {
res += key + "=" + value;
}
return encodeURI(location.origin + location.pathname + res + location.hash);
}
|
Разбейте на несколько функций, примеры
function getUrlVars() {
var vars = {};
location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(_,key,value) {vars[key] = value});
return vars;
}
и
function encodeData(data) {
var pairs = [], value = '';
for (var name in data) {
if (data.hasOwnProperty(name)) {
pairs.push(name + '=' + data[name]);
}
}
return pairs.join('&');
}
и
function insertIntoGet(key, value) {
var obj = getUrlVars();
obj[key] = value;
return '?' + encodeData(obj);
}
|
Взято тут:
https://github.com/medialize/URI.js/ I always want to shoot myself in the head when looking at code like the following: |
| Часовой пояс GMT +3, время: 06:25. |