有没有办法用javascript获取所有GET变量?

时间:2010-07-20 17:39:30

标签: php javascript get

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

这是因为如果使用mod_rewrite制作漂亮的网址,则网址查询不会显示所有参数

那么有没有办法让查询字符串完全匹配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文件中。

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

在您的网页&lt; head&gt;:

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

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

答案 2 :(得分:1)

查询字符串位于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]);
    }
})();

你在$_GET中有一些非常类似于QueryStr.val的内容。

当然,你提到你使用mod_rewrite混合了一些东西,这很酷,但由于我们不知道你的重写方案,我们无法帮助具体

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