Есть ли способ получить все переменные GET с помощью JavaScript? - PullRequest
1 голос
/ 20 июля 2010

Во-первых, я не хочу, чтобы в запросе URL. Я хочу, чтобы PHP видел в массиве $_GET.

Это связано с тем, что запрос URL не будет отображать все параметры, если mod_rewrite был использован для создания красивых 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 файл.

Ответы [ 3 ]

3 голосов
/ 20 июля 2010

На вашей странице :

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

Предполагается, по крайней мере, PHP 5.2, в противном случае используйте внешний пакет

3 голосов
/ 20 июля 2010

Разве JavaScript не «видит» только строку запроса? Как клиентский скрипт узнает о каких-либо правилах перезаписи?

Единственный способ, которым я могу придумать, - это использовать PHP - отобразить его в переменную в виде встроенного сценария на главной странице, а не в файле JS.

1 голос
/ 20 июля 2010

Строка запроса находится в 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 на символе / вместо &.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...