Как мне сделать правильные условия для URL-адреса на основе значения переменной? (JavaScript) - PullRequest
0 голосов
/ 16 сентября 2018

Мой скрипт javascript выглядит так:

<script>

    var url = 'http://my-app.test/item';
    var sessionBrand = 'honda';
    var sessionModel = 'jazz';
    var sessionCategory = 'velg';
    var sessionKeyword = 'RS 175/60 R 15';

    if(sessionBrand)
        var brand = '?brand='+sessionBrand;
    else
        var brand = '';

    if(sessionModel)
        var model = '&model='+sessionModel;
    else
        var model = '';

    if(sessionCategory)
        var category = '&category='+sessionCategory;
    else
        var category = '';

    if(sessionKeyword)
        var keyword = '&keyword='+this.sessionKeyword;
    else
        var keyword = '';

    var newUrl = url+brand+model+category+keyword;
    console.log(newUrl);

</script>

Результат console.log выглядит так:

http://my-app.test/item?brand=honda&model=jazz&category=velg&keyword=RS 175/60 R 15

var sessionBrand, sessionModel, sessionCategory и sessionKeyword является динамическим.Это может измениться.Он может быть нулевым или иметь значение

У меня проблема

Например, такой случай:

    var sessionBrand = '';
    var sessionModel = '';
    var sessionCategory = '';
    var sessionKeyword = 'RS 175/60 R 15';

URL должен быть таким:

http://my-app.test/item&keyword=RS 175/60 R 15

Должен ли URL-адрес выглядеть следующим образом:

http://my-app.test/item?keyword=RS 175/60 R 15

Я все еще не могу выполнить условие

Как мне решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Просто используйте массив для параметров, а затем соедините их с разделителем &.Например:

var url = 'http://my-app.test/item';
var sessionBrand = 'honda';
var sessionModel = 'jazz';
var sessionCategory = 'velg';
var sessionKeyword = 'RS 175/60 R 15';

var params = [];

if (sessionBrand) {
    params.push('brand=' + sessionBrand);
}

if (sessionModel) {
    params.push('model=' + sessionModel);
}

if(sessionCategory) {
    params.push('category=' + sessionCategory);
}

if(sessionKeyword) {
    params.push('category=' + sessionCategory);
}
var newUrl = url + '?' + params.join('&');
console.log(newUrl);
0 голосов
/ 16 сентября 2018

Проблема с вашим кодом заключается в том, что он предопределяет все параметры запроса с помощью & - за исключением sessionBrand. В URL-адресе необходимо, чтобы параметр first начинался с ?, а все остальные с &. Как вы видели, ваш код не делает этого, когда нет sessionBrand.

Есть несколько способов исправить это. Наверное, самое приятное, что я могу придумать, - это собрать различные части, как вы, но без никаких префиксов - затем соединить их все вместе в конце. Вот так (я только что видел решение Виктора, это точно такая же идея, но более аккуратная, потому что он переписал больше вашего предыдущего кода):

if(sessionBrand)
    var brand = 'brand='+sessionBrand;
else
    var brand = '';

if(sessionModel)
    var model = 'model='+sessionModel;
else
    var model = '';

if(sessionCategory)
    var category = 'category='+sessionCategory;
else
    var category = '';

if(sessionKeyword)
    var keyword = 'keyword='+this.sessionKeyword;
else
    var keyword = '';

var queryString = '?' + [sessionBrand, sessionModel, sessionCategory, sessionKeyword].filter(function(str) {
    return str.length > 0;
}).join("&");

var newUrl = url+queryString;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...