
Γράφω μια εφαρμογή AJAX, αλλά καθώς ο χρήστης κινείται μέσα από το app, θα ήθελα τη διεύθυνση URL στη γραμμή διευθύνσεων για να ενημερώσετε παρά την έλλειψη της σελίδας επαναφορτίσεις. Βασικά, θα ήθελα για να είναι σε θέση να σελιδοδείκτη σε οποιοδήποτε σημείο και με αυτόν τον τρόπο να επιστρέψετε στην τρέχουσα κατάσταση.


Πώς είναι οι άνθρωποι που χειρίζονται τη διατήρηση ηρεμία στις AJAX εφαρμογές; 

 
Τροποποίηση γραμμή διευθύνσεων URL σε AJAX App που ανταποκρίνονται στη σημερινή μέλος
=====================================================================================



Ο τρόπος για να γίνει αυτό είναι να χειραγωγήσουν `location.hash`, όταν ενημερώσεις AJAX οδηγήσει σε μια αλλαγή κατάστασης που θα θέλατε να έχουν μια διακριτική URL. Για παράδειγμα, αν η διεύθυνση URL της σελίδας σας είναι:



> 
> <http://example.com/>
> 
> 
> 


Αν μια πλευρά του πελάτη λειτουργία εκτελείται αυτόν τον κωδικό:



```
// AJAX code to display the "foo" state goes here.

location.hash = 'foo';

```

Στη συνέχεια, η διεύθυνση URL που εμφανίζεται στο πρόγραμμα περιήγησης θα πρέπει να ενημερώνεται για:



> 
> <http://example.com/#foo>
> 
> 
> 


Αυτό επιτρέπει στους χρήστες να σελιδοδείκτη το «foo» κατάσταση της σελίδας, και να χρησιμοποιήσετε το ιστορικό του προγράμματος περιήγησης για να περιηγηθείτε μεταξύ των κρατών.


Με αυτό το μηχανισμό στη θέση του, θα πρέπει στη συνέχεια να αναλύσει το τμήμα hash του URL στην πλευρά του πελάτη χρησιμοποιώντας την Javascript για να δημιουργήσει και να εμφανίσει την κατάλληλη αρχική κατάσταση, όπως αναγνωριστικά τμήμα (το τμήμα μετά το #) δεν αποστέλλονται με το υπηρέτης.


[Plugin hashchange Ben Alman του](http://benalman.com/projects/jquery-hashchange-plugin/) κάνει το τελευταίο παιχνιδάκι αν χρησιμοποιείτε jQuery.

 

Αυτό είναι παρόμοιο με αυτό που είπε ο Kevin. Μπορείτε να έχετε κατάσταση του πελάτη σας κάποιο αντικείμενο javascript, και όταν θέλετε να αποθηκεύσετε το κράτος, που σε συνέχειες το αντικείμενο (χρησιμοποιώντας JSON και base64 κωδικοποίηση). Στη συνέχεια μπορείτε να ρυθμίσετε το τμήμα της href σε αυτό το κορδόνι.



```
var encodedState = base64(json(state));
var newLocation = oldLocationWithoutFragment + "#" + encodedState;

document.location = newLocation; // adds new entry in browser history
document.location.replace(newLocation); // replaces current entry in browser history

```

Ο πρώτος τρόπος θα αντιμετωπίσει τη νέα κατάσταση ως μια νέα θέση (έτσι το πίσω κουμπί θα τους μεταφέρει στην προηγούμενη θέση). Ο τελευταίος δεν το κάνει.

 

SWFAddress λειτουργεί σε Flash και Javascript έργα και σας επιτρέπει να δημιουργήσετε bookmarkable διευθύνσεις URL (χρησιμοποιώντας τη μέθοδο κατακερματισμού που αναφέρθηκαν παραπάνω), καθώς και σας δίνει την υποστήριξη back-κουμπί.


<http://www.asual.com/swfaddress/>

 

Η window.location.hash μέθοδος είναι ο προτιμώμενος τρόπος αντιμετώπισης των πραγμάτων. Για μια εξήγηση για το πώς να το κάνουμε, 
 [μοτίβα Άγιαξ - Μοναδικές διευθύνσεις URL](http://ajaxpatterns.org/Unique_URLs) .


YUI έχει εφαρμογή αυτού του προτύπου ως μια ενότητα, η οποία περιλαμβάνει IE εναλλακτικοί συγκεκριμένη εργασία για να πάρει το πίσω κουμπί που εργάζονται μαζί με επανεγγραφή τη διεύθυνση χρησιμοποιώντας το hash. [YUI Browser Ιστορικό Προπονητή](http://developer.yahoo.com/yui/history/) .


Άλλες πλαίσια έχουν παρόμοιες εφαρμογές, καθώς και. Το σημαντικό σημείο είναι, αν θέλετε η ιστορία να εργαστούν μαζί με την επανεγγραφή τη διεύθυνση, τα διαφορετικά προγράμματα περιήγησης χρειάζονται διαφορετικούς τρόπους χειρισμού του. (Αυτό είναι λεπτομερώς στο πρώτο άρθρο σύνδεσμο.)


IE χρειάζεται μια βάση hack iframe, όπου ο Firefox θα παράγει διπλή ιστορία χρησιμοποιώντας την ίδια μέθοδο.

 

Ελέγξτε αν ο χρήστης είναι «in» της σελίδας, όταν κάνετε κλικ στη γραμμή url, javascript λέει ότι είναι εκτός της σελίδας. Εάν αλλάξετε τη γραμμή url και πατήστε το πλήκτρο «ENTER» με το σύμβολο «#» μέσα σε αυτό, στη συνέχεια, πηγαίνετε στη σελίδα και πάλι, χωρίς κάντε κλικ στη σελίδα με το χέρι με το δείκτη του ποντικιού, τότε μια εντολή περίπτωση keyboad (document.onkeypress) από την javascript θα να είναι σε θέση να ελέγξει εάν έχει εισέλθει και ενεργό το javascript για ανακατεύθυνση. Μπορείτε να ελέγξετε αν ο χρήστης βρίσκεται στην σελίδα με window.onfocus και ελέγξτε αν είναι έξω με window.onblur.


Ναι, αυτό είναι δυνατό.


?)

 

Κοιτάξτε ιστοσελίδες όπως το book.cakephp.org. Αυτός ο δικτυακός τόπος αλλάζει το URL χωρίς τη χρήση του κατακερματισμού και τη χρήση AJAX. Δεν είμαι σίγουρος πώς το κάνει ακριβώς, αλλά έχω προσπαθήσει να το καταλάβω. Αν κάποιος ξέρει, επιτρέψτε μου να ξέρω.


Επίσης github.com όταν κοιτάζει μια πλοήγηση μέσα σε ένα συγκεκριμένο έργο.

 

Είναι απίθανο ο συγγραφέας θέλει να φορτώσετε εκ νέου ή να ανακατευθύνει τις εντυπώσεις του, κατά τη χρήση Ajax. Αλλά γιατί να μην χρησιμοποιούν HTML5 του `pushState`/ `replaceState`;


Θα είστε σε θέση να τροποποιήσει γραμμή διεύθυνσης όσο θέλετε. [Αποκτήστε φυσική διευθύνσεις URL που αναζητούν, με AJAX.](https://www.w3.org/TR/2010/WD-html5-20100624/history.html#history)


Ελέγξτε τον κωδικό για το τελευταίο έργο μου: 
 <http://iesus.se/>

 

Αν ΕΠ ή άλλοι εξακολουθούν να ψάχνουν για έναν τρόπο για να το κάνουμε τροποποίηση του ιστορικού του προγράμματος περιήγησης για να ενεργοποιήσετε κατάσταση, χρησιμοποιώντας pushState και replaceState, όπως προτείνεται από Iesus, είναι το «σωστό» τρόπο για να το κάνουμε τώρα. Είναι κύριο πλεονέκτημα έναντι location.hash φαίνεται να είναι ότι δημιουργεί πραγματικές διευθύνσεις URL, όχι μόνο hashes. Αν ιστορικό περιήγησης χρησιμοποιώντας hashes αποθηκεύεται, και στη συνέχεια να επανεξεταστεί με απενεργοποιημένη τη javascript, η εφαρμογή δεν θα λειτουργήσει, καθώς οι hashes δεν αποστέλλονται στο διακομιστή. Ωστόσο, αν έχει χρησιμοποιηθεί pushState, ολόκληρη η διαδρομή θα σταλεί στον server, το οποίο μπορείτε να δημιουργήσετε για να ανταποκριθεί κατάλληλα στις διαδρομές. Είδα ένα παράδειγμα όπου η ίδια πρότυπα μουστάκι χρησιμοποιήθηκαν τόσο στο διακομιστή όσο και στην πλευρά του πελάτη. Αν ο πελάτης έχει ενεργοποιημένη javascript, θα πάρει ζωηρός απαντήσεις, αποφεύγοντας το λεωφορείο στο διακομιστή, αλλά η εφαρμογή θα μπορούσε να λειτουργήσει απολύτως εντάξει χωρίς την javascript. Έτσι, η εφαρμογή μπορεί να με χάρη υποβαθμίσει απουσία javascript.


Επίσης, πιστεύω ότι υπάρχει κάποια πλαίσιο εκεί έξω, με ένα όνομα όπως history.js. Για τα προγράμματα περιήγησης που υποστηρίζουν HTML5, που χρησιμοποιεί pushState, αλλά αν το πρόγραμμα περιήγησης δεν υποστηρίζει ότι, πέφτει αυτόματα πίσω στην χρήση hashes.

 