Использование Javascript / jQuery для получения строки запроса в URL-адресе на основе сегмента - PullRequest
5 голосов
/ 26 июня 2011

Я использую PHP-фреймворк Codeigniter, который использует URL-адреса на основе сегментов, такие как http://www.mydomain.com/age/11/name/john/color/red вместо обычных строк запросов lijke http://www.mydomain.com/index.php?age=11&name=john&color=red.

Как получить значение ageключ из URL с использованием Javascript / jQuery?

После получения значения 11 я передам его в объект jQuery при возникновении события.

$( "#searchdistance_slider" ).slider({
        range: "min",
        value: 5,
        min: 0.5,
        max: 10,
        slide: function( event, ui ) {
            $( "#search_distance" ).val(ui.value + " miles");
            window.location.replace("http://www.domain.com/" + age); 
            /* passing the value of age into URL to redirect to */
        }
    });

ОБНОВЛЕНИЕ

  • Пары ключ / значение могут изменить положение , а количество пар ключ / значение в URL не фиксировано
  • Iнеобходимо получить значение в Javascript , поскольку пользователь использует ползунок для изменения определенного значения, скажем age, и новое значение 20 из ползунка будет использоваться для перенаправления пользователя на http://www.mydomain.com/age/20/name/john/color/red

Ответы [ 4 ]

3 голосов
/ 26 июня 2011

Вы можете попробовать использовать плагин jQuery URL .

Используйте вызов .segment(n) для поиска пути URL для "age" и найдите следующий, который должен содержать искомое значение возраста.

Или попробуйте метод .fsegment(n), если age всегда находится в одной и той же позиции.

Или используйте .segment() с чем-то вроде:

var parts = $.url(your_url).segment();
var params = [];
for (var i=0; i<parts.length/2; i++) {
   params[parts[2*i]] = parts[2*i+1];
}
var age = parseInt(params['age']);

(Я уверен, что есть более красивый способ сделать это, хотя.)

Если вам нужна только часть age, вам не нужно делать всю эту вставку в словарь. Просто выйдите из цикла пораньше, когда вы найдете нужный ключ.

Если вы хотите восстановить путь с измененным возрастом, попробуйте что-то вроде:

var parts = $.url(your_url).segment();
var newpath = '';
for (var i=0; i<parts.length/2; i++) {
  if (parts[2*i] == 'age') {
    newpath += '/age/' + (parseInt(parts[2*i+1]) + 42); // put your age modifiy
                                                        // code here
  } else {
    newpath += '/' + parts[2*i] + '/' + parts[2*i+1];
  }
}
alert(newpath);
1 голос
/ 26 июня 2011

Вы можете разделить его на что-то вроде этого:

var parts = {},
    bits = location.pathname.substr(1).split('/'); // get rid of first / and split on slashes

for (var i = 0; i<bits.length; i += 2) {
    parts[bits[i]] = bits[i+1];
}

Затем вы можете получить доступ к значению age с помощью parts.age.

0 голосов
/ 26 июня 2011

Вы можете использовать переменную window.location.href, которая выдаст вам весь текущий URL, а затем поиграть со строкой, чтобы получить нужную информацию. Подстрока, разбиение, даже регулярное выражение.

Это будет работать:

var ageMatch= window.location.href.match(/age\/([\d]*)/);
var age= ageMatch[1];

Только для записи, вы также можете легко обновить URL:

var newUrl= window.location.href.replace(/age\/([\d]*)/, age);
window.location.href= newUrl;
0 голосов
/ 26 июня 2011

перед запуском вашего кода, добавьте в ваш php-скрипт следующее:

<?php
$getAgre = ( isset($_GET['age']) && strlen($_GET['age'])>0 )? $_GET['age'] : 'null';
echo '<script>var age = '. $getAge .';</script>';
?>

edit: убедитесь, что у вас есть некоторая проверка безопасности перед отображением содержимого $ _GET ['age'], и ваш JS будет лучше, когда ваше событие в .slider () проверит, является ли переменная получить существует

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