JQuery로 GET 및 POST 변수를 얻는 방법?


96

어떻게 간단하게받을 수 있나요 GETPOSTJQuery와 함께 값?

내가 원하는 것은 다음과 같습니다.

$('#container-1 > ul').tabs().tabs('select', $_GET('selectedTabIndex'));

답변:


171

GET 매개 변수의 경우 다음에서 가져올 수 있습니다 document.location.search.

var $_GET = {};

document.location.search.replace(/\??(?:([^=]+)=([^&]*)&?)/g, function () {
    function decode(s) {
        return decodeURIComponent(s.split("+").join(" "));
    }

    $_GET[decode(arguments[1])] = decode(arguments[2]);
});

document.write($_GET["test"]);

POST 매개 변수의 경우 $_POSTJSON 형식 의 객체를 <script>태그 로 직렬화 할 수 있습니다 .

<script type="text/javascript">
var $_POST = <?php echo json_encode($_POST); ?>;

document.write($_POST["test"]);
</script>

서버 측에서 작업하는 동안 PHP에서도 GET 매개 변수를 수집 할 수 있습니다.

var $_GET = <?php echo json_encode($_GET); ?>;

참고 : 내장 json_encode기능 을 사용하려면 PHP 버전 5 이상이 필요 합니다.


업데이트 : 다음은보다 일반적인 구현입니다.

function getQueryParams(qs) {
    qs = qs.split("+").join(" ");
    var params = {},
        tokens,
        re = /[?&]?([^=]+)=([^&]*)/g;

    while (tokens = re.exec(qs)) {
        params[decodeURIComponent(tokens[1])]
            = decodeURIComponent(tokens[2]);
    }

    return params;
}

var $_GET = getQueryParams(document.location.search);

3
추출 방법은 값이없는 인수를 고려하지 않습니다 ( "? foo & bar = baz"=> {foo : "", bar : "baz"}).
Gumbo

1
검보를 잡으세요! 정규식의 =는 선택 사항이어야합니다. ... snip ... (? : = ([^ &] *))? &?) / g
Ates Goral

1. 첫 번째 GET 예제가 저에게 효과가없는 것 같습니다. 당신의 갱신 2. 함수의 이름은에 오타가 있습니다
제이크 윌슨에게

사파리 또는 크롬에서 실행 해 보셨습니까? 무한 루프를 생성하고 브라우저를 충돌시킵니다. "? p = 2"와 같은 간단한 방법으로 시도해보세요
MrColes 2011 년

@MrColes : 이케 스. 이 글을 쓴 지 오래되었습니다. 그 이후로 Webkit은 RegExp 개체가 리터럴로 사용될 때 내부 위치 카운터를 업데이트하지 않는다는 것을 발견했습니다. 수정 사항으로 답변을 업데이트하겠습니다.
Ates Goral 2011 년

16

.getUrlParams 라는 GET 매개 변수를 가져 오는 jQuery 용 플러그인이 있습니다.

POST의 경우 유일한 해결책은 Moran이 제안한 것처럼 PHP를 사용하여 POST를 자바 스크립트 변수로 에코하는 것입니다.


6

좋은 오래된 PHP를 사용하지 않는 이유는 무엇입니까? 예를 들어 GET 매개 변수 'target'을 받았다고 가정 해 보겠습니다.

function getTarget() {
    var targetParam = "<?php  echo $_GET['target'];  ?>";
    //alert(targetParam);
}

7
이것은 서버 측 솔루션이고 질문은 클라이언트 측 / 자바 스크립트 / jQuery 측에 관한 것이기 때문입니다.
Hrvoje Kusulja 2014 년

@hkusulja는 상해에 모욕을 추가합니다 : 당신이 그것을 확신하더라도 나는 여전히 질문이 독점적으로 서버 측이라는 것을 알 수 없습니다. 난 ... 도구로 두꺼운 느낌
토니 길

1
이 스크립트는 끔찍합니다. 사이트를 해킹하려면 이것을 사용하십시오. 항상 사용자가 입력 한 변수를 이스케이프 !! $ _GET을 직접 출력하지 마십시오.
charj


3

서버 측 언어를 사용하면 POST 변수를 javascript로 내 보내야합니다.

.그물

var my_post_variable = '<%= Request("post_variable") %>';

빈 값에주의하십시오. 내보내려는 변수가 실제로 비어 있으면 javascript 구문 오류가 발생합니다. 문자열이라는 것을 알고 있다면 따옴표로 묶어야합니다. 정수인 경우 javascript에 줄을 쓰기 전에 실제로 존재하는지 테스트 할 수 있습니다.


1
하지만 항상 서버 측 언어에 액세스 할 수있는 것은 아닙니다. 예를 들어 GitHub 페이지 ...
Adam B


2

여기 GET에 몇 년 동안 최적화 된 루틴 인 전역 개체의 모든 변수 를 수집하는 것이 있습니다. jQuery가 등장한 이후로 jQuery 자체에 저장하는 것이 적절 해 보이며 잠재적 인 핵심 구현에 대해 John과 확인하고 있습니다.

jQuery.extend({
    'Q' : window.location.search.length <= 1 ? {}
        : function(a){
            var i = a.length, 
                r = /%25/g,  // Ensure '%' is properly represented 
                h = {};      // (Safari auto-encodes '%', Firefox 1.5 does not)
            while(i--) {
                var p = a[i].split('=');
                h[ p[0] ] = r.test( p[1] ) ? decodeURIComponent( p[1] ) : p[1];
            }
            return h;
        }(window.location.search.substr(1).split('&'))
});

사용 예 :

switch ($.Q.event) {
    case 'new' :
        // http://www.site.com/?event=new
        $('#NewItemButton').trigger('click');
        break;
    default :
}

도움이 되었기를 바랍니다. ;)



1

$ _GET이 다차원 인 경우 다음과 같이 할 수 있습니다.

var $_GET = {};
document.location.search.replace(/\??(?:([^=]+)=([^&]*)&?)/g, function () {
    function decode(s) {
            return decodeURIComponent(s.split("+").join(" "));
    }

    //handling for multidimensional arrays
    if(decode(arguments[1]).indexOf("[]") > 0){
        var newName = decode(arguments[1]).substring(0, decode(arguments[1]).length - 2);
        if(typeof $_GET[newName] == 'undefined'){
            $_GET[newName] = new Array();
        }
        $_GET[newName].push(decode(arguments[2]));
    }else{
        $_GET[decode(arguments[1])] = decode(arguments[2]);
    }
});

1

간단하지만 URL에서 변수 / 값을 얻는 데 유용합니다.

function getUrlVars() {
    var vars = [], hash, hashes = null;
    if (window.location.href.indexOf("?") && window.location.href.indexOf("&")) {
        hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    } else if (window.location.href.indexOf("?")) {
        hashes = window.location.href.slice(window.location.href.indexOf('?') + 1);
    }
    if (hashes != null) {
        for (var i = 0; i < hashes.length; i++) {
            hash = hashes[i].split('=');
            vars[hash[0]] = hash[1];
        }
    }
    return vars;
}

인터넷 어딘가에서 발견했지만 몇 가지 버그를 수정했습니다.


1

뒤에 오는 기능을 사용하십시오 :

var splitUrl = function() {
    var vars = [], hash;
    var url = document.URL.split('?')[0];
    var p = document.URL.split('?')[1];
    if(p != undefined){
        p = p.split('&');
        for(var i = 0; i < p.length; i++){
            hash = p[i].split('=');
            vars.push(hash[1]);
            vars[hash[0]] = hash[1];
        }
    }
    vars['url'] = url;
    return vars;
};

get 변수의 이름이 vars['index']어디 'index'인지 변수에 액세스 합니다.


이 코드는 http://foo.com/?a=b#bar. b#bar의 가치 라고 생각 합니다 a.
MM

1

간단하게

VARIABLE_KEY 를 변수의 키로 대체 하여 값을 가져옵니다.

 var get_value = window.location.href.match(/(?<=VARIABLE_KEY=)(.*?)[^&]+/)[0]; 

0

기록을 위해이 질문에 대한 답을 알고 싶었 기 때문에 PHP 방법을 사용했습니다.

<script>
var jGets = new Array ();
<?
if(isset($_GET)) {
    foreach($_GET as $key => $val)
        echo "jGets[\"$key\"]=\"$val\";\n";
}
?>
</script>

이렇게하면이 후에 실행되는 모든 javascript / jquery가 jGet의 모든 항목에 액세스 할 수 있습니다. 내가 느끼는 멋진 우아한 솔루션입니다.


0

내 접근 방식 :

var urlParams;
(window.onpopstate = function () {
var match,
      pl     = /\+/g,  Regex for replacing addition symbol with a space
       search = /([^&=]+)=?([^&]*)/g,
      decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); },
       query  = window.location.search.substring(1);
   urlParams = {};
   while (match = search.exec(query))
    urlParams[decode(match[1])] = decode(match[2]);
})();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.