2009-07-15 14 views
20

In questo momento il problema più grande che ho riscontrato con l'utilizzo di AJAX è il fatto che se uso AJAX su una pagina, vai a un'altra pagina, quindi utilizza il pulsante Indietro del browser per tornare indietro a ciò che è stato modificato con AJAX.URL di aggiornamento sulla chiamata AJAX?

Ho pensato di utilizzare il plug-in jQuery Addresss per risolvere questo problema, ma non mi piace come si modifica l'URL con "# whatever.html" invece di modificarlo completamente.

Idealmente, ciò che desidero è che l'URL passi da: "www.example.com/p:2/" a "www.example.com/p:3/" quando effettuo la chiamata AJAX pertinente .

È possibile?

+0

Io non credo che si possa cambiare completamente l'URL corrente senza forzare una pagina ricarica (almeno, non in un modo affidabile che tutti i browser). Potrei sbagliarmi però. – inkedmn

+0

Non sono proprio sicuro di cosa vuoi fare .. vuoi memorizzare i parametri della pagina, così puoi mantenere lo stato di una pagina attraverso la navigazione? – flesh

risposta

19

No, questo non è possibile. Aggiornamento : ora è possibile tramite l'API Cronologia HTML5 - vedere razbakov's answer.

Spero vi rendiate conto che state cercando di risolvere un problema estremamente difficile.

Diciamo che il vostro URL assomiglia

http://example.com/mypage/ 

Se si modifica la posizione della finestra di programmazione per

http://example/mypage/1/ 

Browser si farà carico e cercare di passare a quella pagina, ci va il codice ajax fantasia !

Quindi qual è l'alternativa? Tu usi il frammento di URL.

Diciamo che hai un URL come questo,

http://example.com/anotherpage/#section 

Browser primo carico http://example.com/anotherpage/ e cercare di trovare un ancoraggio chiamato 'la sezione' e scorrere fino a quella posizione. Questo comportamento è sfruttato dal plugin 'Indirizzi'. Questo è simile al modo in cui funzionano i collegamenti "Scorri verso l'alto".

Quindi, se siete sulla pagina

http://example.com/mypage/ 

e modificare l'URL per

http://example.com/mypage/#1 

Browser non viene caricato nuova pagina, ma piuttosto cercare di trovare ancoraggio con nome '1' e scorrere fino a che ancora.

Anche se si è riusciti ad aggiungere frammenti all'URL, ciò non significa che il lavoro sia stato eseguito. Se l'utente preme il pulsante Indietro, il DOM verrà ripristinato e dovrai analizzare questi frammenti e ricreare il DOM. È decisamente non banale.

19

È possibile con HTML5. Puoi provare come esempio il sito GitHub o Vkontakte.

La migliore risposta è qui: Change the URL in the browser without loading the new page using JavaScript

Si dice che è possibile utilizzare la funzione history.pushState a tali fini. Ma questa soluzione funzionerà solo con browser compatibili HTML5. Altrimenti è necessario utilizzare il metodo hash.

2

pjax gestisce questo con garbo nel browser moderno.

+3

non sicuro se la ricarica della pagina intera può essere considerata elegante. – clime

0

Dopo aver effettuato la chiamata AJAX, è possibile aggiornare l'URL del client utilizzando history.pushState. Si prega di trovare la seguente sintassi ed esempio

Sintassi: history.pushState (obj, obj.Title, obj.Url);

Esempio:

var url = "http://example.com/mypage/" + "newParameter=newValue" 
history.pushState(undefined, '', url);