login  Naam:   Wachtwoord: 
Registreer je!
 Forum

history.js: rare html code na ajax

Offline Wijnand - 11/03/2015 10:41
Avatar van WijnandModerator Ik gebruik jQuery en heb de onderstaande javascript code (voor gebruik zie https://github.com/browserstate/history.js/):

  1. var currentUrl = '';
  2. function historyjs() {
  3. var type = 'url';
  4. var History = window.History, State = History.getState(), $log = $('#log');
  5. currentUrl = location.pathname;
  6. $("a:not(.fancybox):not([target=_blank]").on('click',function(event) {
  7. event.preventDefault();
  8. var myURLHandler = function(url){
  9. if (type == 'url') {
  10. $.ajax({
  11. url: url
  12. }).done(function(html) {
  13. $('div#ajax-container').html(html);
  14. init();
  15. });
  16. }
  17. };
  18. History.Adapter.bind(window,'statechange',function() {
  19. if (currentUrl != location.pathname) {
  20. var State = History.getState();
  21. myURLHandler(State.url);
  22. currentUrl = location.pathname;
  23. }
  24. });
  25. History.pushState(null, null, $(this).attr('href'));
  26. });
  27. }


Deze code werkt in principe goed, en er wordt dus een javascrtip ajax uitgevoerd. Als ik na de ajax-call in chrome kijk (in de bron), dan zie je de hele html. Maar doe ik dit in firefox dan zie ik alleen de source van de ajax request.

Weet iemand hoe ik dit kan fixen?

1 antwoord

Gesponsorde links
Offline Thomas - 11/03/2015 17:11
Avatar van Thomas Moderator Wat is "in de bron"? En wat is concreet het verschil? Bekijk je in beide gevallen echt hetzelfde (response van oorspronkelijke pagina vs DOM)? Hebben beide browsers dezelfde instellingen m.b.t. cache/history/andere gerelateerde instellingen?

Mogelijk offtopic: is er een reden waarom je voor je AJAX-call een aparte functie gebruikt (myURLHandler)? En waarom gebruik je .done() (in plaats van success() in de call zelf) want je hebt toch geen verschillende implementaties voor de afhandeling van de AJAX-call (je gebruikt deze niet generiek). Je zou dus op regel 21 rechtstreeks de AJAX-call kunnen uitvoeren.

Come to think of it, is het van belang dat de AJAX-call echt klaar is als je je currentUrl update (of andere acties uitvoert)? In deze opzet kunnen regel 21 en 22 "parallel" plaatsvinden, in die zin dat je AJAX-call nog bezig kan zijn terwijl de rest van je code verder gaat. Als je aan het spam-klikken slaat op je links gaat er wellicht op den duur iets uit de pas lopen? Met functies als .done en .success voorkom je dit juist (er wordt gewacht op de response).

Je declareert ook twee keer State met "var".

Kun je het gedrag wat je beschrijft ook los van dit historyjs gebeuren bestuderen? Dan kun je uitsluiten of dit hier aan ligt of toch browser-specifiek gedrag is.
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.286s