Domanda

Ora ecco la mia situazione: sto facendo un cm.Quando vengono cliccarono i collegamenti, vorrei che le pagine caricano dinamicamente usando Ajax.Il problema nei collegamenti!

L'unico modo per modificare l'indirizzo nella barra degli indirizzi in tempo reale è utilizzare tag di ancoraggio.Ma PHP non ottiene i tag di ancoraggio, quindi non posso caricare il contenuto della pagina sul carico del sito usando PHP. E se dovessi caricare le pagine utilizzando una stringa di query, la stringa di query non può essere aggiornata nella barra degli indirizzi con il clic di un collegamento, dal momento che ricarirebbe la pagina.

Suppongo che JavaScript possa controllare l'indirizzo, salvare il tag di ancoraggio in un cookie e ricaricare la pagina, ma preferirei non dover andare a tali lunghezze.

Qualcuno conosce una soluzione a questo problema?

È stato utile?

Soluzione

C'era una domanda simile non molto tempo fa, e ho trovato la seguente soluzione.

I tuoi URL dovrebbero indicare pagine reali per farne funzionare per gli utenti disabili JS.I gestori dei clic dovrebbero gestire richieste AJAX.L'hash dovrebbe contenere l'URL e una parte come &ajax per indicare il tipo di richiesta.

Se la richiesta proviene da Ajax semplicemente invia il contenuto.Se non lo è, avvolgi il contenuto in intestazione e piè di pagina per rispondere con un sito completo.

Gli URL dovrebbero funzionare con il collegamento a Ajax generati hash e utilizzarli come collegamenti.L'intera idea è fondamentalmente mimica il tipo di comportamento che puoi vedere su Facebook.

JavaScript

// click handler for ajax links
function goToWithAjax(hash) {
  hash = hash.href ? hash.getAttribute("href", 2) : hash;
  ajax( hash, function( response ) {
    document.getElementById("content").innerHTML = response;
  });
  hash = ("#!/" + hash).replace("//","/");
  window.location.hash = hash;
  return false;
}
.

.htaccess

auto_prepend_file = "prepend.php"  
auto_append_file  = "append.php"  
.

Antepend

$url   = $_SERVER['REQUEST_URI'];
$parts = explode('#!', $url);
$hash  = isset($parts[1]) ? $parts[1] : false;

// redirect if there is a hash part
if ($hash) {
  header("Location: $hash");
}

// find out if it's an ajax request
$ajax = strstr($url, "&ajax");

// we need header if it's not ajax
if (!$ajax) {
  get_header();
}
.

Aggiungi

// we need footer if it's not ajax
if (!$ajax) {
  get_footer();
}
.

get_header ()

function get_header() {

echo <<< END
<html>
<head></head>
<body>
<div id="page">
  <div id="header">
    <div id="logo"></div>
    <ul id="nav">menu...</ul>
  </div>
  <div id="content">
END;

}
.

get_footer ()

function get_footer() {

echo <<< END
  </div> <!-- end of #content --->
  <div id="footer">(c) me</footer>
</div> <!-- end of #page --->
</body>
</html>
END;

}
.

Altri suggerimenti

I can see why you might want to load parts of the page with ajax. A whole page is rather pointless though.

A jQuery solution might be something like:

$(a.ajax_link).click(function(){
  var url = $(this).attr('href');
  $.ajax({
    url:url,
    success:function(data) {
      $('body').html(data);
      return false;
    }
  });
});

I have in no way tested that, but it should still work without javascript enabled.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top