2012-11-30 12 views
5

Wir haben an einer Web-Anwendung gearbeitet und wir haben es gerade fertig, aber es gibt eine Sache, die uns stört (obwohl auf keinen Fall wird es die Produktion zu stoppen.)verstecken Variablen übergeben in URL

Wenn wir eine der Seiten aufrufen (index.html), müssen wir manchmal eine Variable in der URL (searchid) übergeben. So erhalten wir eine Seite wie http://domain.com/index.html?searchid=string.

Wir möchten im Idealfall nicht die ?searchid=string zeigen, aber ich bin mir nicht sicher, wie wir das tun würden.

Meine Gruppe besitzt nicht die Seite index.html (aber wir arbeiten mit der Gruppe, die das tut), also weiß ich nicht, wie viel wir mit etwas wie .htaccess oder ähnlichem machen könnten.

Ich dachte über POST ing die Variable, aber ich weiß nicht, wie man es mit nur HTML und jQuery erhalten. Eine andere Person in meiner Gruppe dachte, dass wir sie nach dem Laden der Seite aus der URL entfernen könnten, aber ich nehme an, dass wir eine Seitenaktualisierung benötigen würden, die dann trotzdem die Daten verlieren würde.

Ich versuche, XY-Problem zu vermeiden, wo das Problem X ist und ich frage nach Y, also, was ist der richtige Weg, um die Variable aus der URL zu entfernen?

+0

Was ich nicht verstehe, ist der Grund, warum Sie die Abfragezeichenfolge von der URL entfernen möchten. Ändert sich der Inhalt der Seite so, dass der Query-String nicht mehr relevant ist? – zzzzBov

+1

'.htaccess' würde es erlauben, die URL zu verschönern, die in etwas wie "http: // domain.com/searchfor/string" umgewandelt werden kann. Wäre das genug? Wenn Sie "string" ganz loswerden wollen, glaube ich nicht, dass es ohne POSTing möglich ist. Und Sie können keine POST-Daten von html/js lesen, nur vom Server-Ende. – bfavaretto

+0

Warum stört es Sie, dass Sie eine erholsame Anwendung machen? – epascarello

Antwort

2

Ihre Frage scheint um anzuzeigen, dass die Zielseite ist nicht und wird nicht von einigem serverseitiges Skript mit Strom versorgt werden. Wenn das der Fall ist, würde ich vorschlagen, die Abfragezeichenfolgeflag auf einen Hash zu ändern, das den Vorteil, dass direkt editierbare ohne Auslösen eine Seitenlade hat:

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> 

Obwohl, wäre es besser, um einige Server-Side-Scripting beteiligt hier beteiligt.

+0

Das sieht so aus, als wäre es am einfachsten zu implementieren, wenn man jetzt Code an die andere Gruppe weitergibt. – Rob

0

Es ist möglich, die URL mit JavaScript History API neu zu schreiben. History.js ist eine Bibliothek, die das sehr gut macht.

Ich glaube nicht, dass es notwendig ist, die Abfragezeichenfolge von der URL zu entfernen, es sei denn, Sie ändern den Inhalt der Seite dynamisch, um die aktuelle Abfragezeichenfolge irrelevant zu machen.

+0

Wir sind, und im Allgemeinen ist es ein großes hässliches. – Rob

6

können Sie die History-API verwenden, aber es erfordert einen modernen Browser

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

Das URL als /index.html erscheinen ohne Neuladen der Seite

Weitere Informationen hier verursachen:

Manipulated the browser history

+0

Dies ist eine gute Lösung, aber es wird mehr Arbeit für diese Änderung zu implementieren sein. Upvote! – Rob

+0

Dies ist bei weitem die beste Antwort, aber Sie sollten vielleicht hinzufügen, wie Sie bestimmte Parameter ausblenden (z. B. "http: //example.com/index.html?such=cats&utm_source=app"), wo Sie die ausblenden möchten Quelle für Analysen, aber Sie möchten die Suche einbeziehen, damit Benutzer den Link freigeben oder ein Lesezeichen dafür erstellen können. –

0

Sie könnten die Daten veröffentlichen, dann der Server lassen die gebuchten Daten in der Seite enthalten, zB:

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

Dies funktioniert cross-browser.