2011-06-26 6 views
5

Używam kodu PHP Codeigniter, który używa adresów URL opartych na segmentach, takich jak http://www.mydomain.com/age/11/name/john/color/red zamiast zwykłych querystrings lijke http://www.mydomain.com/index.php?age=11&name=john&color=red.Używanie Javascript/jQuery do otrzymania łańcucha zapytań w adresie URL opartym na segmencie

Jak mogę pobrać wartość klucza age z adresu URL za pomocą Javascript/jQuery?

Po przechwyceniu wartości 11 Przekażę ją do obiektu jQuery po wystrzeleniu zdarzenia.

$("#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 */ 
     } 
    }); 

UPDATE

  • klucz/wartość pary może zmienić pozycję oraz liczbę par klucz/wartość w adresie URL nie są stałe
  • muszę chwycić wartość w języku JavaScript, ponieważ użytkownik używa suwaka do zmiany określonej wartości, na przykład age, a nowa wartość 20 z suwaka służy do redirowania t użytkownika do http://www.mydomain.com/age/20/name/john/color/red

Odpowiedz

3

Możesz spróbować użyć wtyczki jQuery URL parser.

Użyj wywołania .segment(n), aby wyszukać ścieżkę URL dla "age" i pobrać następną, która powinna zawierać żądaną wartość wiekową.

Lub wypróbuj metodę .fsegment(n), jeśli age jest zawsze w tej samej pozycji.

Albo użyć .segment() z czymś takim:

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']); 

(. Jestem pewien, że jest ładniejszy sposób to zrobić chociaż)

Jeśli chcesz tylko age udział, nie trzeba zrobić to wszystko w słowniku. Po prostu wyjdź z pętli wcześniej, gdy znajdziesz klucz, który chcesz.

Jeśli chcesz odtworzyć ścieżkę ze zmienionym wieku, spróbuj coś takiego:

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); 
+0

pozycja pary klucz/wartość w zmianach segmentów URL, więc myślę, że trudno jest zaatakować konkretną parę klucz/wartość z łatwością używając wtyczki z tego, co widzę – Nyxynyx

+0

Niezupełnie. '.segment()' zwraca tablicę wszystkich fragmentów ścieżki. Po prostu hash, jeśli potrzebujesz wyszukiwania opartego na kluczach (będę post przykład). – Mat

+0

świetnie .. czy znasz szybki sposób na zrekonstruowanie całego adresu URL po aktualizacji 'params ['age']'? Zastanawiam się nad użyciem podobnej pętli 'for' do tej używanej do mieszania tablicy, ale z' newurl + = newurl + "/" + części [2 * i] + "/" + części [2 * i + 1] 'występuje z każdą iteracją – Nyxynyx

1

Można podzielić ją z czymś takim:

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]; 
} 

Następnie można uzyskać dostęp do wartości age z parts.age.

+0

Brzmi jak to będzie działać. Zaktualizowałem moje pytanie. Jak zaktualizować wartość "age" o nową wartość, a następnie przekazać adres URL z nową wartością "age" do "window.location.replace()"? – Nyxynyx

0

przed uruchomieniem kodu należy dodać następujące do skryptu PHP:

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

edit: upewnij się, że masz jakieś zabezpieczenie sprawdzanie przed wyświetleniem zawartości $ _GET [ „wiek”] i swoimi JS będzie być lepszym, gdy twoje wydarzenie w .suwak() sprawdzić, czy zmienna dostać istnieje

0

Można użyć window.location.href zmienną, która nie daje cały bieżący adres URL, a następnie bawić się z napisu trochę, aby uzyskać żądaną informację. Substring, split, a nawet wyrażenie regularne.

to będzie działać:

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

Tylko dla rekordu, można również zaktualizować url tak łatwo:

var newUrl= window.location.href.replace(/age\/([\d]*)/, age); 
window.location.href= newUrl; 
Powiązane problemy