Почему массив window.location.href.split ("?") Сам меняет свое значение - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь перезагрузить страницу по щелчку переключателей (список городов), указав значение переключателей в качестве параметров запроса в URL. Предположим, мой текущий URL-адрес

http://localhost:3001/offers?category=Dining&sub_categories=Home%20Delivery&city=

И при выборе любой радиокнопки я хочу, чтобы ее значение было добавлено к параметру city в URL. Таким образом, желаемый URL должен быть

http://localhost:3001/offers?category=Dining&sub_categories=Home%20Delivery&city=Mumbai

Но проблема в том, что при изменении URL-адреса sub_categories автоматически удаляется, и последний URL-адрес, который я получаю, таков:

http://localhost:3001/offers?category=Dining&city=Mumbai

Вот мой код для управления URL:

$(document).on('click', '.city-selector' ,function(event) {
    event.preventDefault() ;
    var city_name = this.labels[0].textContent.trim().split("(")[0].trim() ;
    var location_string = window.location['href'].split('?');
    if(location_string.length > 1 && location_string[1].indexOf("city") > -1){
      var all_params = location_string[1].split("&") ;
      all_params.splice(all_params.indexOf("city=" + gon.selected_city), 1) ;
      all_params.splice(all_params.indexOf("localities=" + gon.selected_localities), 1) ;
      gon.selected_localities = '' ;
      location_string[1] = all_params.join("&") ;
      location_string[1] = location_string[1] + "&city=" + city_name ;
      window.location.href = location_string[0] + "?" +location_string[1] ;
    }

  }) ;

СОВЕТ : проблема заключается в очереди location_string = window.location['href'].split('?'); Когда я регистрирую массив location_string, он не содержит параметр sub_categories.
Но ты уверен, какая вещь срывает это.

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Я думаю, что вы должны использовать регулярное выражение для замены URL:

var url = 'http://localhost:3001/offers?category=Dining&sub_categories=Home%20Delivery&city=';

var cityName = 'Mumbai';
var cityParams = 'city=' + cityName;


var newUrl = url + '&' + cityParams;
if (url.indexOf('?') === -1) {
    newUrl = url + '?' + cityParams;
} else if (url.indexOf('city=') > -1) {
    newUrl = url.replace(/(city=[\w\d%_]*)/g, cityParams);
}

Он также работает с URL, как: http://localhost:3001/offers?category=Dining?city=hanoi&sub_categories=Home%20Delivery

http://localhost:3001/offers

0 голосов
/ 03 мая 2018

Один из способов достижения этого:

var url = window.location.href;

var urlParams = url.split ('?');

if (urlParams.length> 1) {

urlParams = urlParams [1] .split ('&');

urlParams.map (функция (пары) {

if(param.index('city=')){
    return param += city_name;
}
return param;

})

window.location.href = url.split ('?') [0] + '?' + urlParams.join ('&');

} else {

window.location.href = urlParams [0] + '?' + 'city =' + city_name;

* *} Тысяча двадцать-один
...