Na prática
O objetivo é tornar o AJAX acessível, ocultando-se a complexidade do seu uso:
Temos um pedaço da página que contém links para esta mesma página, que só provocam alterações nesse pedaço:
- colocamos esse pedaço num template separado
 -  marcamos os links afetados com a classe ajax: 
<a href='meulink' class='ajax'>...</a> -  incluímos o template adicional na página principal com 
<INCLURE{fond=meutemplate,ajax,env}>ou
#INCLURE{fond=meutemplate,ajax,env} 
E é tudo!
Alguns pequenos detalhes, ainda assim:
-  teste sempre o seu template sem o argumento 
{ajax}; -  
{ajax}deverá ser sempre acompanhado de{env}para evitar qualquer risco de injeção de URLs no cache do SPIP; -  por padrão, os links 
acontidos numa classepaginationsão também «ajaxados»; -  é possível afetar outros links especificando os seus seletores CSS jquery na variável javascript 
ajaxbloc_selecteur. Exemplo:var ajaxbloc_selecteur = 'a.ajax, a.umaoutraclasse';; -  obviamente, é preciso que 
#INSERT_HEADconste no head do template da página, e que o javascript esteja ativo no navegador do visitante que a consulta. 
Em detalhe
Sintaxe de chamada :
<INCLURE{fond=meu_encontrado,ajax,env}>
ou
[(#INCLURE{fond=meu_encontrado,ajax,env})]
Esta chamada inclui o template meu_encontrado «ajaxando» automaticamente todos os links afetados pela variável JS ajaxbloc_selecteur.
Um bloco <div ..></div> é inserido automaticamente em torno do conteúdo do template incluído, pelo mecanismo de gestão do ajax.
Por padrão, este afeta os seletores CSS .pagination a, a.ajax. Em outras palavras, é preciso ter no código fonte dos templates:
-  seja a gestão padrão da paginação pelo SPIP. Na condição que a tag 
#PAGINATIONseja incluída num elemento de classepagination. Ex:<p>#PAGINATION</p> -  seja uma classe 
ajaxnos links (<a class="ajax" href=...>) 
O hit ajax reinicia automaticamente o cálculo do template incluído sozinho restaurando o seu #ENV, e incluindo os parâmetros passados no URL do link.
O bloco recarregado fica com opacidade 50% e assume a classe loading durante o carregamento, possibilitando estilizá-lo à vontade.
É interessante notar que:
-  os links 
ajaxsão colocados em cache no navegador ao serem clicados uma vez. O bloco só será carregado uma vez, mesmo se o visitante retornar diversas vezes ao link em questão -  alguns links podem ser pré-carregados antecipadamente se se incluir a classe 
preload 
Alguns exemplos
Utilização de links ajax
Sendo o template inc-links.html
Ele será chamado no template principal por
[(#INCLURE{fond=inc-links,ajax,env})]
E conterá
<BOUCLE_lista(AUTEURS) >
  <a class="ajax" href="[(#SELF|parametre_url{id_auteur,#ID_AUTEUR})]">
    #NOM #ID_AUTEUR
  </a>
</BOUCLE_lista>
[(#ENV{id_auteur}|oui)
  #ENV{id_auteur}
]
Utilização da paginação
Para a paginação, tomemos um exemplo tirado de squelettes-dist/sommaire.html.
Coloquemos num template inc-recentes.html o loop que lista as matérias recentes:
[(#REM) Últimas matérias ]
<B_materias_recentes>
<div class="menu articles">
  [(#ANCRE_PAGINATION)]
  <h2><:derniers_articles:></h2>
  <ul>
  <BOUCLE_materias_recentes(ARTICLES) {par date}{inverse} {pagination 5}>
    <li class="hentry">
      [(#LOGO_ARTICLE_RUBRIQUE|#URL_ARTICLE|image_reduire{150,100})]
      <h3 class="entry-title"><a href="#URL_ARTICLE" rel="bookmark">#TITRE</a></h3>
      <abbr class="published"[ title="(#DATE|date_iso)"]>[(#DATE|affdate_jourcourt)]</abbr>[, <:par_auteur:> (#LESAUTEURS)]
      [<div class="#EDIT{intro} introduction entry-content">(#INTRODUCTION)</div>]
    </li>
  </BOUCLE_materias_recentes>
  </ul>
  [<p class="pagination">(#PAGINATION)</p>]
</div>
</B_materias_recentes>
Agora, basta colocar no sommaire.html, no lugar deste loop
<INCLURE{fond=inc-recentes,ajax,env}>
Limites e casos particulares
Este mecanismo automatizado de «ajaxação» dos blocos baseia-se numa hipótese: por padrão, um link ajax só permite atualizar o bloco que o contém, inserindo a versão alterada no mesmo lugar. Note que é possível, a partir de um bloco, recarregar um outro bloco da página, usando a técnica descrita mais abaixo.
Além disso, é importante notar que o cálculo do template incluído deve se basear exclusivamente nos parâmetros passados em #ENV. Com efeito, no cálculo do bloco ajax, ele será recalculado sozinho, por trás do template que o chama. Apenas as variáveis contidas em #ENV serão restauradas.
Assim, não é possível fazer referência a variáveis globais do PHP: estas não serão restauradas no momento do cálculo do bloco ajax. Se realmente quiser usar as variáveis globais do PHP, será preciso re-injetá-las em #ENV no momento da inclusão:
<INCLURE{fond=meutemplate,ajax,env,parametre=#EVAL{$GLOBALS['toto']}}>
Modalidades complementares
SPIP 3.0 melhorou o mecanismo:
Histórico de navegação
Os links .ajax não quebram o histórico de navegação nos navegadores que suportam a API HTML5 History (Firefox, Safari, Chrome à data desta matéria). Ou seja, quando se clica num link ajax do  SPIP que recarrega uma parte da página, o URL é atualizado no navegador e o visitante pode clicar em Voltar para recuar.
Classes especiais nos links ajax
-    
.nohistoryindica que o link não afetará o histórico de navegação ao ser clicado; -   
.preloadindica ao SPIP que o conteúdo do link ajax deve ser pré-carregado no momento em que a página é carregada. Assim o click sobre o link produzirá uma atualização imediata; -  
.nocacheindica ao SPIP que o conteúdo do link ajax não deve ser colocado em cache. Assim, vários cliques no mesmo link provocarão outros tantos carregamentos a partir do servidor (por padrão, apenas o primeiro carregamento ocorre para um dado URL e o conteúdo é, em seguida, memorizado pelo navegador). 
#BOUTON_ACTION
Os #BOUTON_ACTION podem desencadear o carregamento do bloco incluído em ajax.
Recarregamento telecomandado de blocos ajax
Os links .ajax permitem, por padrão, o recarregamento do bloco ajax que os contém, mas é preciso, às vezes, provocar o recarregamento de um outro bloco ajax da página.
Para isso, é possível, no momento da sua inclusão, nomear os blocos ajax que dever poder ser recarregados:
<INCLURE{fond=...,ajax=nomedobloco} />
O bloco ajax assim nomeado pode, em seguida, ser recarregado pela chamada de ajaxReload('nomedobloco').
É possível passar como segundo argumento uma lista de opções contendo:
-    
callback: função callback que deve ser chamada após o carregamento ajax do bloco; 
-     
args: lista de argumentos que serão passados ao URL durante o carregamento do bloco (permite modificar o #ENV do bloco atualizado); 
-     
history: indica se o recarregamento afeta ou não o histórico de navegação (falso por padrão). 
Exemplo
ajaxReload('nomedobloco', {
	callback:function(){alert('terminado');},
	args:{id_article:3},
	history:false
});
ajaxReload pode ser usado igalmente num seletor jQuery, caso em que provocará o recarregamento do menor bloco ajax que contém o elemento afetado. Ele só tem um argumento possível (a matriz de opções) : 
$('#contenu').ajaxReload({args:{id_article:3}})
Ver também
- <INCLURE> outros templates
 - Ajax num #BOUTON_ACTION
 - Documentação "Blocs-ajax-et-ajaxReload" em programmer.spip.net
 -  AjaxReload em exemplos 
e Exemplo de bloco telecomandado em Ajax em contrib.spip.net