Warum ist der hash " - Teil der URL nicht auf dem server?
Zum Beispiel, wenn ich die URL:
http://www.foo.com/page.php?parameter=kickme#MOREURL
Dann auf dem server gibt es keine Artikel: #MOREURL
Möglich ist, zu senden oder diese Artikel an den server, ohne jQuery, AJAX?.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, es steht nur im browser, so müssen Sie sich mit Javascript. Der server kann es nicht Lesen.
Erklärung:
Im Grunde die hash-Komponente der URL der Seite (der Teil nach dem " # " - Zeichen) werden von der browser - der browser übergibt Sie an den server. Dies ist leider Teil der HTML-standard und ist die gleiche, ob oder nicht Sie sind mit IE oder einem anderen browser (und für diese Angelegenheit PHP oder andere server-side-Technologie).
Hier ist, was Wikipedia sagt darüber:
urlencode('#')
den hash zu"%23" und dannurldecode('%23')
zu "#" wieder auf dem server, so dass es nicht get an den server übertragen. Dies nicht mit JavaScript, wie von OP, aber PHP. Wenn Sie auch nicht wollen, um die PHP verwenden, schreiben Sie "%23" in Ihren HTML-code von hand 😉%23
würde einfach behandelt werden als Bestandteil des Werts, dh?foo=bar%23what
würde bewirken, dass der server zu wörtlich interpretieren, da $foo = 'bar#was'.http://tools.ietf.org/html/rfc2396#section-4
Als der browser sendet nicht den hash an den server standardmäßig der einzige Weg, es zu tun ist, um einige Javascript:
Wenn die form übermittelt, greifen die hash (window.Lage.hash) und speichern Sie es in einem server-side hidden-input-Feld Setzen Sie diese in ein DIV mit der id "urlhash" also, wir finden es einfach später.
Auf dem server Sie können diesen Wert verwenden, wenn Sie brauchen, um etwas zu tun mit es. Sie können sogar ändern Sie es, wenn Sie müssen.
Beim laden der Seite " auf dem client, überprüfen Sie den Wert dieses versteckte Feld. Sie wollen, um es zu finden, indem das DIV in der Sie enthalten sind, als die automatisch generierte ID nicht bekannt ist. Ja, könnten Sie tun, ein paar Tricks hier mit .ClientID, aber wir fanden es einfacher zu benutzen Sie einfach das wrapper-DIV, da es ermöglicht, alle diese Javascript zu Leben, in einer externen Datei und wird in einer generischen Weise.
Wenn das hidden-input-Feld einen gültigen Wert hat, festlegen, dass die URL-hash (window.locaion.hash wieder) und/oder andere Aktionen durchführen.
Wir verwendet jQuery vereinfachen die Auswahl des Feldes, etc... alles in allem ist es endet als ein paar jQuery-Aufrufe, eine um den Wert zu speichern, und eine andere, um Sie wiederherzustellen.
Bevor Einreichen:
Laden der Seite:
IsHashValid() kann die Prüfung für "nicht definiert" oder andere Dinge, die Sie nicht behandeln möchten.
Also, stellen Sie sicher, dass Sie $(document).ready() natürlich angemessen.
Ich würde gerne verlängern, die Antwort auf den Grund WARUM das fragment ist nicht an den server gesendet. Denn es ist gewollt und gewünscht. Schauen wir uns die URL-Zeichenfolge im gesamten.
/path/to/element?query=string&for=server#?optional=fragment&for=browser
<----- URI ----> <---- QUERY STRING ---> <----- FRAGMENT STRING ------>
URI eindeutig wird die Ressource abgerufen von einem server
ABFRAGE definiert Operationen durchgeführt werden, die vom server auf die Ressource
FRAGMENT Steuerelemente-browser (Anwendung) Verhalten. Fragment verwendet werden sollte, um
speichern Sie den Zustand der Anwendung sollte für den Benutzer sichtbar sein, so kann der Benutzer senden Sie den link an einen anderen Benutzer, um den gleichen Zustand der Anwendung.
Fragment ist nur ein Teil der URL-kostenlos für Sie transparent umzusetzen, single-page-web-Anwendungen (kann offline auf Ihrem Handy zum Beispiel).
Es muss daher nicht an den server gesendet werden.