Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Вставка в get заброс/обновление данных в get запросе (https://javascript.ru/forum/events/76202-vstavka-v-get-zabros-obnovlenie-dannykh-v-get-zaprose.html)

Wild_Wolf 13.12.2018 01:00

Вставка в 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);
    }

Vlasenko Fedor 13.12.2018 03:48

Разбейте на несколько функций, примеры
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);
}

SuperZen 13.12.2018 15:34

Взято тут:
https://github.com/medialize/URI.js/

I always want to shoot myself in the head when looking at code like the following:


Часовой пояс GMT +3, время: 19:15.