URL에 추가하고 페이지 새로 고침


답변:


162

이것은 작동해야합니다 (테스트되지 않았습니다!)

var url = window.location.href;    
if (url.indexOf('?') > -1){
   url += '&param=1'
}else{
   url += '?param=1'
}
window.location.href = url;

1
str.search (regex)가 srt.indexOf (str2)보다 빠릅니다
xavierm02

1
그리고 변수 이름이있는 ull 예제와 encodeURIComponent ()를 사용하는 변수 매개 변수를 제공해야합니다.
xavierm02

insteand>의 -1, 당신은 사용해야합니다 == -1!
xavierm02

8
하나는 이것에 후속하여, 매개 변수가 이미 URL에 존재하는 경우 새 매개 변수를 추가하는 대신 값을 업데이트한다는 논리를 추가 할 수 있습니까?
아마추어

1
이것은 URL에서 앵커 (해시 값)를 가져옵니다. 존재하는 경우 @amateur 여기에서 수행하는 함수를 찾을 수 있습니다. stackoverflow.com/questions/486896/…
Doug Molineux

143

허용 된 답변보다 짧지 만 동일한 작업을 수행하지만 간단하게 유지하십시오.

window.location.search += '&param=42';

우리는 위치의 검색 속성으로 알려진 쿼리 문자열 만 전체 URL을 변경할 필요가 없습니다.

검색 속성에 값을 지정하면 브라우저에서 물음표가 자동으로 삽입되고 페이지가 다시로드됩니다.


11
이 유일한 매개 변수가 될 것입니다 알고있는 경우에, 당신은 또한 대신에 추가의 검색을 설정할 수 있습니다 :window.location.search = '?param=42';
데이브 DuPlantis

1
잘 했어!! 정확하고 단순하며 최적화 된 방법 허용 된 답변이어야합니다.
Rohit

URL이 www.mysite.com 인 경우 어떻게해야합니까? 그러면 URL이 "www.mysite.com & param = 42"가 아닌데 "?" URL에서 유일한 매개 변수이므로 문자. @Shlomi Komemi의 대답은 두 가지 주요 시나리오를 다루므로 좋아합니다.
greaterKing

1
@greaterKing하면 위치의 검색 속성에 매개 변수를 추가 할 때 브라우저가 물음표를 추가합니다. 브라우저 콘솔에서 사용해보십시오.
Bo Frederiksen

1
내 나쁜 @BoFrederiksen 당신은 실제로 맞습니다 ... 그것에 대해 잘못했습니다. "+ ="of coarse ... 그것을 놓쳤다. 나에게서 +1
greaterKing

70

여기에있는 대부분의 답변은 다음 스 니펫 또는 유사한 변형과 ​​같이 URL에 매개 변수를 추가해야한다는 것을 제안합니다.

location.href = location.href + "&parameter=" + value;

이것은 대부분의 경우에 아주 잘 작동합니다.

하나

내 의견으로는 URL에 매개 변수를 추가하는 올바른 방법이 아닙니다.

제안 된 접근 방식은 매개 변수가 URL에 이미 설정되어 있는지 테스트하지 않으므로주의하지 않으면 동일한 매개 변수가 여러 번 반복되는 매우 긴 URL로 끝날 수 있습니다. 즉 :

https://stackoverflow.com/?&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=1

이 시점에서 문제가 시작됩니다. 제안 된 접근 방식은 여러 페이지를 새로 고친 후 URL이 매우 길어 URL을 무효화 할 수 있습니다. 긴 URL에 대한 자세한 내용을 보려면이 링크를 따르십시오 . 다른 브라우저에서 URL의 최대 길이는 얼마입니까?

이것이 내가 제안한 접근법입니다.

function URL_add_parameter(url, param, value){
    var hash       = {};
    var parser     = document.createElement('a');

    parser.href    = url;

    var parameters = parser.search.split(/\?|&/);

    for(var i=0; i < parameters.length; i++) {
        if(!parameters[i])
            continue;

        var ary      = parameters[i].split('=');
        hash[ary[0]] = ary[1];
    }

    hash[param] = value;

    var list = [];  
    Object.keys(hash).forEach(function (key) {
        list.push(key + '=' + hash[key]);
    });

    parser.search = '?' + list.join('&');
    return parser.href;
}

이 기능을 사용하면 다음을 수행해야합니다.

location.href = URL_add_parameter(location.href, 'param', 'value');

1
사용하지 않는 이유 :if(window.location.search.indexOf('&param=') == -1) {window.location.search += '&param=1';}
538ROMEO

@ SébastienGarcia-Roméo 그렇습니다. 흥미로운 접근 방식이지만 실제로는 유효하지만 기능이 왜 그렇게 프로그래밍되는지에 대한 두 가지 이유가 있습니다. 1. 기존 중복 매개 변수를 제거합니다. 2. 기존 매개 변수의 값을 덮어 씁니다. 이러한 관점에서 볼 때 이제 indexOf코드를 사용하면 불필요한 복잡성 이 발생할 수 있습니다.
yeyo


2
function gotoItem( item ){
    var url = window.location.href;
    var separator = (url.indexOf('?') > -1) ? "&" : "?";
    var qs = "item=" + encodeURIComponent(item);
    window.location.href = url + separator + qs;
}

더 많은 compat 버전

function gotoItem( item ){
    var url = window.location.href;    
    url += (url.indexOf('?') > -1)?"&":"?" + "item=" + encodeURIComponent(item);
    window.location.href = url;
}

1

아래 코드를 확인하십시오 :

/*Get current URL*/    
var _url = location.href; 
/*Check if the url already contains ?, if yes append the parameter, else add the parameter*/
_url = ( _url.indexOf('?') !== -1 ) ? _url+'&param='+value : _url+'?param='+value;
/*reload the page */
window.location.href = _url;

1

위의 @yeyo의 신중한 답변에 대한 하나의 작은 버그 수정.

변화:

var parameters = parser.search.split(/\?|&/);

에:

var parameters = parser.search.split(/\?|&amp;/);


이러한 수정 사항을 의견에 게시하거나 제안 및 편집하십시오. 그들은 별도의 답변을 보증하지 않습니다.
투명성과 모니카 JJ

1

이 시도

var url = ApiUrl(`/customers`);
  if(data){
   url += '?search='+data; 
  }
  else
  { 
      url +=  `?page=${page}&per_page=${perpage}`;
  }
  console.log(url);

0

또한:

window.location.href += (window.location.href.indexOf('?') > -1 ? '&' : '?') + 'param=1'

Shlomi의 라이너 하나만 북마크에 사용할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.