【问题标题】:Is there any way to get all GET vars with javascript?有什么方法可以使用 javascript 获取所有 GET 变量?
【发布时间】:2010-07-20 17:39:29
【问题描述】:

首先,我不想要 URL 查询中的内容。我想要 PHP 在$_GET 数组中看到的内容。

这是因为如果 mod_rewrite 已用于制作漂亮的 URL,则 URL 查询将不会显示所有参数

那么有没有办法获得与 php $_GET 数组中的内容完全匹配的查询字符串?

--

我自己想出了一种使用 PHP 和 JavaScript 的方法,如下所示:

function query_string()
{
    <?php
        function assoc_array_to_string ($arr)
        {
            $a = array();
            foreach($arr as $key => $value)
            {
                $str = $key.'='.$value;
                $a[] = $str;
            }
            return implode("&",$a);
        }
    ?>
    return '<?=urlencode(assoc_array_to_string($_GET))?>';
}

...但如果可能的话,我只需要使用 javascript 来执行此操作,因为我无法将 PHP 代码放入 .js 文件中。

【问题讨论】:

  • (Javascript无法到达服务器。它不会知道mod_rewrite在做什么。以上是您可以在没有服务器交互的情况下进行的最佳解决方案。)
  • @KennyTM 这不是重复的,因为上面的问题是询问如何获取 url 查询字符串中的内容,我不是。我不知道它们是否存储在任何可从 JS/DOM 检索的地方。我想没有,但是像 Jhongs 这样的解决方案比上面的链接更适合我的问题。

标签: php javascript get


【解决方案1】:

JavaScript 不会“只看到”查询字符串吗?客户端脚本如何知道任何重写规则?

我能想到的唯一方法是使用 PHP -- 将其回显到主页内内联脚本中的变量中,而不是 JS 文件中。

【讨论】:

    【解决方案2】:

    在您的页面中

    <script type="text/javascript">
    var phpQueryParams = <?php print json_encode($_GET); ?>
    </script>
    

    假设至少 PHP 5.2,否则使用 external package

    【讨论】:

    • 虽然返回的 JSON 对于可能的恶意字符串而言应该可以安全使用,但您或许应该将脚本内容包装在 中,并结合 str_replace 来转]]> 进入 ]"+"]> 以便包含 ]]> 的字符串不会结束 CDATA 块。如果您决定不使用 JSON 编码器,您应该更加警惕恶意查询字符串可能会将脚本注入您的页面的方式。
    【解决方案3】:

    查询字符串在window.location.search 中找到,但那是原始查询字符串。所以如果你运行这样的东西:

    (function () {
        QueryStr = {}
        QueryStr.raw = window.location.search.substr(1);
        var pairStrs = QueryStr.raw.split('&');
        QueryStr.val = {}
        for(var i=0,z=pairStrs.length; i < z; i++) {
            var pair = pairStrs[i].split('=');
            QueryStr.val[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
        }
    })();
    

    QueryStr.val 中的内容与 $_GET 非常相似。

    当然,您提到您使用 mod_rewrite 将事情搞混了,这很酷,但由于我们不知道您的重写方案,因此我们无法特别提供帮助.

    但是...知道你的重写方案,你可能会修改我上面给出的代码来操作window.location的其他部分。我敢打赌,您希望将window.location.pathname 拆分为/ 字符而不是&amp;

    【讨论】:

    • 谢谢,我可以(因为我知道 mod_write 方案)使用正则表达式或其他东西从 URL 中提取它。但是,我想要一种不那么特别的方式,因为我希望在具有不同方案的多个页面上重用它。我想我可能会像 Jhong 建议的那样做一些事情,并且只需要一个函数中的参数,该参数可以使用 php 从 .js 文件外部传入。但是感谢您的建议,这是我什至没有想到的想法!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多