Ciao artorious,
in effetti il tuo sistema si avvicina molto a quello da cui sono partito io.
Alla fine sono riuscito a trovare degli esempi in rete che mi hanno aiutato a capire ancora di più jQuery, e di questo sono felice.

Ammetto che il risultato però non è ancora soddisfacente perchè credo si potesse scrivere con meno codice, ma i livelli di interazione sono almeno 3 ed è stato complicato gestirli.

Io ho fatto cosi.

Prima di tutto c'è da fare una puntualizzazione.
Immaginiamo di avere il link "Metti nei preferiti" che deve cambiare al click con una risposta dal server "Ok è stato messo nei preferiti". Ora, c'è da considerare che se l'utente va in un articolo dove ce l'ha già nei preferiti io devo mostrare una terza istanza "Ce l'hai nei preferiti"... questo mi ha un pò complicato la vita.

Andiamo al codice.

Codice PHP:
// SCRIPT AJAX/JQUERY PER AGGIUNGERE/RIMUOVERE PREFERITI

$(function() {
        
var 
txt = $('.nomearticolo').text();
var 
act = $('.action').text();
$(
".aggiungi").click(function(){
var 
element = $(this);
var 
element.attr("id");
var 
info 'idart=' I;

 $.
ajax({
   
type"POST",
   
url"/js/send_preferiti.php",
   
datainfo +
   
"&nomearticolo=" txt +
   
"&action=" act,
   
success: function(response){
    $(
".response").show();
    $(
".response").html(response);
    }
   
// success: function(){}
 
 
});
 
    $(
"#aggiungi"+I).hide();
    $(
"#remove"+I).show();

return 
false;

});

});


$(function() {
var 
txt = $('.nomearticolo).text();
var act = $('
.action2').text();
$(".remove").click(function(){
var element = $(this);
var I = element.attr("id");
var info = '
idarticolo=' + I;

 $.ajax({
   type: "POST",
   url: "/js/send_preferiti.php",
   data: info +
   "&nomearticolo=" + txt +
   "&action=" + act,
   success: function(response){
    $(".response").html(response);
    }
 });
    $("#remove"+I).hide();
    $(".response").hide();
    $("#aggiungi"+I).show();

return false;

});

}); 
Come vedi ho dovuto fare una funzione per quando aggiungo, e una per quando rimuovo, sia per cambiare la visiblità dei div, che per la risposta da parte del server.

In questo modo in send_preferiti.php dopo tutti i controlli del caso avrò una semplice risposta di testo "Tutto ok, è stato messo nei preferiti".

PAGINA PHP DI VISUALIZZAZIONE SCRIPT
Codice PHP:
<?php // SCRIPT FAVORITI
if($totalRows_preferiti == ''){ // se non ce l'ha tra i preferiti ?>
<div id="aggiungi<?php echo $row_art['id']; ?>">
[img]http://www.upic.co.nz/skins/upic/images/btn-fav.jpg[/img]
    [url="#"]">Aggiungilo ai preferiti![/url]
    <div class="nomearticolo" style="display:none;"><?php echo $row_art['nome']; ?></div>
    <div class="action" style="display:none;">add_pref</div>
</div>
<div class="response"></div>

<div id="remove<?php echo $row_art['id']; ?>" style="display:none;">
[url="#"]">[X][/url]
<div class="action2" style="display:none;">del_pref</div>
</div>
<? } else { // se ce l'ha nei preferiti altro giro ?>
<div id="aggiungi<?php echo $row_art['id']; ?>" style="display:none;">
[img]http://www.upic.co.nz/skins/upic/images/btn-fav.jpg[/img]
    [url="#"]">Aggiungilo ai preferiti![/url]
    <div class="nomegioco" style="display:none;"><?php echo $row_art['nome']; ?></div>
    <div class="action" style="display:none;">add_pref</div>
</div>
<div id="remove<?php echo $row_art['id']; ?>" style="display:;">Ce l'hai nei preferiti
[url="#"]">[X][/url]
<div class="action2" style="display:none;">del_pref</div>
</div>
<? //  ?>
In pratica, ho dovuto fare una copia delle due istanze per quando l'utente è loggato e ha l'articolo nei suoi preferiti, altrimenti non riuscivo a gestire il display del div.

Insomma, un pò un casino lo ammetto