Передача нескольких хеш-подобных параметров в URL - PullRequest
6 голосов
/ 13 августа 2011

Я создаю динамический веб-сайт, используя jQuery и Ajax. Я решил проблему истории и кнопки возврата с помощью History Plugin . Я хочу передать несколько хеш-подобных параметров в URL, не перезагружая всю страницу по событиям кликов. Я хочу что-то вроде:

  • something.php#type=abc&id=123 или
  • something.php/?type=abc&id=123 ...

Какой может быть лучший способ передать и получить такие же параметры в URL?

<a href="#type=abc&id=123">Click</a>
if(type==abc && id==123)
{
    do this..
}

Обычно мы делаем это, <a href="something.php?type=abc&id=123">Click</a>, но это перезагружает всю страницу.

Ответы [ 2 ]

9 голосов
/ 13 августа 2011

Хэш-значение имеет ограниченный набор символов, которые технически разрешены в нем.Если вы посмотрите здесь URL spec , то значение хеш-функции называется фрагментированным.Вот грамматика того, что она может содержать:

fragmentid              xalphas
xalphas                 xalpha [ xalphas ] 
xalpha                  alpha | digit | safe | extra | escape
safe                    $ | - | _ | @ | . | &  | + | -
extra                   ! | * |  " |  ' | ( | )  | ,
escape                  % hex hex
alpha                   a | b | c | d | e | f | g | h | i | j | k |
                        l | m | n | o | p | q | r | s | t | u | v |
                        w | x | y | z | A | B | C | D | E | F | G |
                        H | I | J | K | L | M | N | O | P | Q | R |
                        S | T | U | V | W | X | Y | Z   
digit                   0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Вы заметите, что вы можете иметь &, но не =, если только вы не вызовете encodeURIComponent и decodeURIComponent для значения хеша при его установке или получении.

Что касается того, какую технику использовать, это действительно зависит от вас.Вы можете создать свой собственный маленький синтаксис в хеш-значении, если вам нужно представить несколько параметров там.Я лично, вероятно, разделил бы значения с помощью &, как в строке запроса, но использовал бы - вместо =.

3 голосов
/ 12 декабря 2013

С точки зрения URI, вы на самом деле можете делать то, что просите.

@ jfriend00 правильно, поскольку вы не можете использовать «=» в имени / значении данного значения хеш-функции,однако, я думаю, что они неправильно поняли спецификацию относительно того, что это на самом деле означает.Вы также не можете использовать символ «=» в имени / значении в строке запроса URL-адреса.Зачем?Потому что он имеет особое значение в обозначении пары ключ / значение.Он служит той же цели в хэше (он же fragmentid), который именно так и используется в вашем примере.

Если вы посмотрите на страницу w3.org для фрагментов мультимедиа третье предложение гласит:

Синтаксис основан на спецификации конкретных пар имя-значение, которые можно использовать во фрагменте URI и запросах запроса URI, чтобы ограничить ресурс мультимедиа определенным фрагментом.

Обратите внимание, что в нем можно использовать пары ключ / значение как для запроса, так и для хеш-части URI.Если вы посмотрите ниже на странице , вы обнаружите, что он описывает формат в точности так, как вы его используете в фрагменте:

Список имя-значениеpair кодируется в компоненте запроса или фрагмента URI.Компоненты имени и значения разделены знаком равенства (=), а несколько пар имя-значение разделены амперсандом (&).

При этом в JavaScript нет встроенногоспособ доступа к парам ключ / значение в структурированном виде (точно так же, как у него нет встроенного способа доступа к парам ключ / значение в строке запроса).Итак, вам нужно создать собственную функцию для этого, и в StackOverflow есть пара других постов, которые уже показывают, как это сделать:

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