IRC-Galleria

Bro

Bro

ei ole enää Galtsun ylläpitäjä, http://irc-galleria.net/feedback auttaa ongelmissa. :)

AJAX-kutsujen edelleenohjausTiistai 17.03.2009 15:42

Aika ajoin tulee tarve edelleenohjata ajaxilla tehtyjä kutsuja jonnekin muualle. Esimerkiksi, kun käyttäjä lähettää kommentin ajaxilla ja käyttäjän sessio on päässyt kuolemaan, tai tapahtuu jotain muuta odottamatonta, niin käyttäjä ohjataan etusivulle.

Ongelmana aiemmin on ollut se, että ajax-kutsu tapahtuu taustalla eikä sen varsinaisen http-kutsun redirraaminen toiseen paikkaan auta mitään, kun käyttäjän selaimessa oleva sivu säilyy paikallaan. Vielä ongelmallisempi tilanne on Ajax.Updater -kutsujen kanssa, kun saattaa käydä vaikka niin, että kommenttilaatikon tilalle ilmestyy etusivu.

Tutkailin tuossa hetken aikaa prototypen ajax-toteutusta, ja löysin sieltä Ajax.Responders-olion, jonka avulla sai helpon ratkaisun ongelmaan. Nyt käytössä onkin tällainen patchays:

  Ajax.Responders.register({
      onComplete: function(request, json) {
          if (json && json.headerJSON && json.headerJSON.redir) {
              document.location.href = json.headerJSON.redir;
          }
      }
  });

Eli PHP:n puolella voidaan nyt redirrailla käyttäjä ajax-kutsuistakin vaikka sinne etusivulle:

  function redir($to) {
      if ($_SERVER == 'XMLHttpRequest') {
          // Use JSON for ajax redirs
          header('X-JSON: ' . json_encode(array('redir' => $to));
      } else {
          header('Location: ' . $to);
      }

      exit;
  }

Win \o/

Etkö vielä ole jäsen?

Liity ilmaiseksi

Rekisteröityneenä käyttäjänä voisit

Lukea ja kirjoittaa kommentteja, kirjoittaa blogia ja keskustella muiden käyttäjien kanssa lukuisissa yhteisöissä.