2012-11-30 12 views
5

Pracujemy nad aplikacją internetową i właśnie skończyliśmy, ale jest jedna rzecz, która nam przeszkadza (choć w żadnym wypadku nie ma to na celu zatrzymania produkcji).Ukryj zmienne przekazane w URL

Kiedy wywołujemy jedną ze stron (index.html), czasami musimy przekazać jej zmienną w adresie URL (searchid). Dostajemy stronę taką jak http://domain.com/index.html?searchid=string.

Chcielibyśmy nie chcieć pokazywać numeru ?searchid=string, ale nie jestem pewien, jak byśmy to zrobili.

Moja grupa nie jest właścicielem strony index.html (ale pracujemy z grupą, która to robi), więc nie wiem, ile byśmy mogli zrobić z czymś takim jak .htaccess lub podobnym.

Myślałem o POST zmiennej, ale nie wiem jak ją otrzymać za pomocą HTML i jQuery. Inna osoba w mojej grupie uważała, że ​​po załadowaniu strony możemy usunąć ją z adresu URL, ale zakładam, że potrzebowalibyśmy odświeżenia strony, która i tak by utraciła dane.

Próbuję uniknąć XY problemu, gdzie problem jest X i pytam o Y, więc jaki jest właściwy sposób, aby usunąć zmienną z adresu URL?

+0

To, czego nie rozumiem, jest powodem, dla którego chcesz usunąć ciąg zapytania z adresu URL. Czy treść strony zmienia się w taki sposób, że ciąg zapytania nie jest już odpowiedni? – zzzzBov

+1

'.htaccess' pozwoliłby ci upiększyć URL, który można przekształcić w coś w stylu 'http: // domain.com/searchfor/string'. Czy to wystarczy? Jeśli chcesz całkowicie pozbyć się 'string', nie wydaje mi się, że jest to możliwe bez POSTing. I nie można odczytać danych POST z html/js, tylko z końca serwera. – bfavaretto

+0

Dlaczego przeszkadza ci, że robisz spokojną aplikację? – epascarello

Odpowiedz

2

Twoje pytanie wydaje się wskazywać, że strona docelowa nie jest i nie będzie zasilany przez jakiś skrypt po stronie serwera. Jeśli jest to sprawa, którą proponujemy zmianę ciągu kwerendy do mieszania, co ma tę zaletę, że bezpośrednio edytowalne bez wyzwalania wczytywanie strony:

http://yourdomain.com/page.html#search=value

<script type='text/javascript'> 
    // grab the raw "querystring" 
    var query = document.location.hash.substring(1); 

    // immediately change the hash 
    document.location.hash = ''; 

    // parse it in some reasonable manner ... 
    var params = {}; 
    var parts = query.split(/&/); 
    for (var i in parts) { 
    var t = part[i].split(/=/); 
    params[decodeURIComponent(t[0])] = decodeURIComponent(t[1]); 
    } 

    // and do whatever you need to with the parsed params 
    doSearch(params.search); 
</script> 

chociaż byłoby lepiej, aby uzyskać tutaj trochę skryptów po stronie serwera.

+0

Wygląda na to, że będzie najłatwiejszy do wdrożenia, przekazując kod do drugiej grupy. – Rob

0

Istnieje możliwość przepisania adresu URL za pomocą interfejsu API historii JavaScript. History.js to biblioteka, która robi to bardzo dobrze.

Nie sądzę, że istnieje potrzeba usunięcia ciągu zapytania z adresu URL, chyba że dynamicznie zmieniasz zawartość strony, aby bieżący ciąg zapytania był nieistotny.

+0

Jesteśmy, i ogólnie rzecz biorąc, jest to bardzo brzydkie. – Rob

6

Można użyć API historii, ale to wymaga nowoczesnej przeglądarki

history.replaceState({}, null, "/index.html"); 

który spowoduje adres URL do pojawiają się jako /index.html bez przeładowania strony

Więcej informacji tutaj:

Manipulated the browser history

+0

To jest dobre rozwiązanie, ale będzie więcej pracy do wdrożenia dla tej zmiany. Awansuj! – Rob

+0

To zdecydowanie najlepsza odpowiedź, ale powinieneś uwzględnić ukrywanie określonych parametrów (np. 'Http: //example.com/index.html? Search = cats & utm_source = app'), w którym chcesz ukryć źródło danych analitycznych, ale chcesz uwzględnić wyszukiwanie, aby użytkownicy mogli udostępnić link lub utworzyć zakładkę. –

0

można dodawać dane, pozwól serwer zawierać dane zamieszczone na stronie, na przykład:

echo "<script> post_data = ".json_encode($_POST)." </script>"; 

To działa w różnych przeglądarkach.

Powiązane problemy