Originariamente inviato da cavicchiandrea
Un link ad una pagina pubblica c'è? E la chiama ajax quale sarebbe secondo te?
chiedo scusa, ho omesso la parte più importante

codice:
(function($){
 $.tableEdit = function(parametri){
   
  
    // dichiaro le variabili configurabili durante l'attivazione

    var idTabella = '#'+parametri.tabella;
	var scriptUrl = parametri.indirizzo;
	var classeHover = parametri.classe;
	var idForm = parametri.form;
	var idInvio = parametri.invio;
	var idResetta = parametri.resetta;
	
	
	
	
	// aggiungi e rimuovi la classe per gestire l'hover sugli span
	
    $('.edit').live('mouseover', function(){
										  
		$(this).addClass(""+classeHover+"");
			
	});
	
	
	 $('.edit').live('mouseout', function(){
										  
		$(this).removeClass(""+classeHover+"");
			
	});

   
    var cont = 0;
	
	$(""+idTabella+" .edit").live('click',function(){
		
	idSpan = $(this).attr("id");
	testoSpan = $(this).text();	
	lunghezzaSpan = testoSpan.length + 1;
    
	cont++; // aumenta cont

	
			if(cont<=1){ // dopo il primo click appendi la form intorno alla tabella e aggancia il submit
			
				$(this).parents("table"+idTabella+"").wrap("<form action=\"#\" id=\""+idForm+"\"></form>");
				
	
				
				$("<input type=\"reset\" id=\""+idResetta+"\" value=\"annulla\" />").insertAfter($(this).parents("table"));
				$("<input id=\""+idInvio+"\" type=\"submit\" value=\"salva i dati\" />").insertAfter($(this).parents("table"));
				
			
			} // fine if prima iterazione
			
			
		$(this).replaceWith("<input type=\"text\" name=\""+idSpan+"\" class=\"text\" size=\""+lunghezzaSpan+"\" value=\""+testoSpan+"\" />");
		// sotituisci il testo con un input con value pari al testo

     
	}); //  fine bind
	
	
	$("#"+idInvio+"").live('click',function(){ 
									   
	
									   
     var padre =  $(this).parents("form");
	 id= "#"+padre.attr("id")+" input.text";
	 
	 dati = new Array();
	 
	 $(id).each(function(i){
						 
				// al click sostituisci tutti gli input aperti con degli span
				// il valore degli span viene calcolato dalla funzione settaValori
				// setta Valori riceve i dati da inviare e il name dell'input
						 
				dati[i] = $(this).attr("name")+"|"+$(this).val();
				$(this).replaceWith("<span id=\""+$(id).attr("name")+"\" class=\"\edit\">"+settaValori(dati, $(id).attr("name"))+"</span>");

					
	 })
	 
      
	// fai comparire il div con la conferma del salvataggio dei dati
	 
   	$("<div class=\"esito\">Dati Aggiornati!</div>").insertAfter("#"+idForm+"").fadeOut(1800);
    
	MiaTabella = $(idTabella).clone(); // clona la nuova tabella
	
    $("#"+idForm+"").replaceWith(MiaTabella); // sostituisci per intero lka form con la nuova tabella
	
	cont=0; // resetta cont per far ripartire la logica di creazione della form
	  
	 return false;


     
	});
	


	$("#"+idResetta+"").live('click',function(){ 
									   
		padre = $(this).parents("form")
		id= "#"+padre.attr("id")+" input.text"
		

			$(id).each(function(){ // ogni input text
				
			// sostituiscilo con uno span con testo pari al suo value
			
			$(this).replaceWith("<span id=\""+$(this).attr("name")+"\" class=\"\edit\">"+$(this).val()+"</span>");

			});
			

		
    });



 	function settaValori(dati, riferimento){ 
   
   // fai una richiesta ajax e invia i dati allo script lato sever
   // aggiorna i nuovi valori e lascia inalterati gli altri
   // rimuovi il tag form
   
		 $.ajax({
		   type: "POST",
		   url: scriptUrl,
		   data: "name="+dati+"",
		   success: function(html){
		
					   var temp = html.split(',') /* crea un array dei valori che torna lo script */
					  
					   var posto = "#"+riferimento; /* appendi il valore nel posto giusto */
					  
							for ( var i=0, len=temp.length; i<len; i++ ){
								if (temp[i].split('|')[0] == riferimento) 
								  daRestituire = (temp[i].split('|')[1]);
						  }
					  
						$(posto).append(daRestituire); /* appendi il valore nel posto giusto */
					
							 
	
				  }
		   
	
			});
		 

   return ""; /* non ritornare altro */

	};

 }
   
})(jQuery);