web-dev-qa-db-ja.com

JavaScriptから直接GETにアクセスしますか?

PHPを使用して、JavaScriptから$_GET変数にアクセスできると思います。

<script>
var to = $_GET['to'];
var from = $_GET['from'];
</script>
<script src="realScript" type="text/javascript"></script>

しかし、おそらくそれはさらに簡単です。 JSから直接行う方法はありますか?

16
Nick Heiner

見る

window.location.search

次のような文字列が含まれます:?foo=1&bar=2

それをオブジェクトに変換するには、いくつかの分割を行うだけです。

var parts = window.location.search.substr(1).split("&");
var $_GET = {};
for (var i = 0; i < parts.length; i++) {
    var temp = parts[i].split("=");
    $_GET[decodeURIComponent(temp[0])] = decodeURIComponent(temp[1]);
}

alert($_GET['foo']); // 1
alert($_GET.bar);    // 2
47
nickf

別のアイデアは次のとおりです。

<script type="text/javascript">

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

alert($_GET['some_key']);
// or
alert($_GET.some_key);

</script>
10
Ionuț G. Stan

私はあなたがこれを考えていたと思います:

<script type="text/javascript">

    var to = "<?= $_GET['to']; ?>";
    var from = "<?= $_GET['from']; ?>";

</script>

...これはあなたのアイデアの構文修正にすぎません:)

4
ilija veselica

このトピックが古いことは知っていますが、JavaScriptの$ _GET用に独自のES6最適化ソリューションを共有したいと思います。このテーマで人気のある質問はすべて、SO初心者による投稿からロックされているようです。したがって、次のようになります。

一発ギャグ

window.$_GET = location.search.substr(1).split("&").reduce((o,i)=>(u=decodeURIComponent,[k,v]=i.split("="),o[u(k)]=v&&u(v),o),{});

array.reduce() arrow関数のMDNドキュメントに皆さんをリンクさせたいと思います。 ]コンマ演算子代入の破棄、および短いcicuit評価しかし、残念ながら、別のSO初心者の制限。

google.com/webhp?q=foo&hl=en&source=lnt&tbs=qdr%3Aw&sa=X&ved=&biw=12のようなURLの場合、オブジェクトがあります。

$_GET = {
   q: "foo",
   hl: "en",
   source: "lnt",
   tbs: "qdr:w",
   sa: "X",
   ved: "",
   biw: "12"
}

$_GET.q$_GET['biw']のようなことをして、必要なものを手に入れることができます。このアプローチでは、重複したクエリパラメータが、検索文字列内の最後に指定された値に置き換えられることに注意してください。これは、 望ましくない/予期しない の場合があります。

URLSearchParams()

現在、(ほとんどの)新しいブラウザには RLSearchParams() があり、次のようなことができます。

window.$_GET = new URLSearchParams(location.search);
var value1 = $_GET.get('param1');
3
James Donohue
document.get = function (d1,d2,d3) {
var divider1 = (d1 === undefined ? "?" : d1);
var divider2 = (d2 === undefined ? "&" : d2);
var divider3 = (d3 === undefined ? "=" : d3);
var url = window.location.href; //the current url
var pget = url.split(divider1)[1]; //slit the url and assign only the part after the divider 1
var pppget = {}; //define the contenitor object
if (pget.search(divider2) > -1) { //control if there is variable other than the first (?var1=a&var2=b) the var2 in this example
    var ppget = pget.split(divider2); //split the divider2 
    for (i = 0;i==ppget.lenght; i++) { //start a for and stop it when i == at object length
        if (ppget[i].search(divider3) > -1) { //control if is an empty var 
            psget = ppget[i].split(divider3);//if is split in 2 part using divider 3
            pppget[psget[0]] = psget[1];//assign to the object the value of first element and for value the second value  ex {var1=a,...}  
        } else {//if is a empty var (?var1&...)
            pppget[ppget[i]] = "";//assign only the value of first element with value a blank string
        }
    }
} else {//if the url don't contain other variable 
    if (pget.search(divider3) > -1) { //control if is an empty var 
        var ppget = pget.split(divider3);//if is split in 2 part using divider 3
        pppget[ppget[0]] = ppget[1];//assign to the object the value of first element and for value the second value  ex {var1=a}  
    } else {//if is a empty var (?var1)
        pppget[pget] = "";//assign only the value of first element with value a blank string
    }
}
return pppget;
/* return the object 
 * the use of the function is like this $_GET=document.get()
 * echo $_GET[var]
 * or use custom divider the default is setted for php standard divider
 */};
0
bomdia

私はこれをGetリクエストに使用します(phpの$ _GETなど):

  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]);
    })();
0
otaxige_aol

他の人が説明しているように、JSからページのURLを解析して変数を取得できます。

値を送信するページで [〜#〜] ajax [〜#〜] を使用することもできます。それは実際には、どのような種類の情報を渡してからユーザーに返すかによって異なります。 (それは間違いなくそれを行うためのより単純またはより直接的な方法ではなく、単なる代替アプローチです)

0
Maiku Mori