Non so cosa sia successo, ma ha smesso di funzionare improvvisamente. Rieseguendo lo stesso codice (per sicurezza l'ho ripreso da qua sopra, identico, che prima andava e ora no) mi dà quest'errore su firefox:

codice:
NS_ERROR_FAILURE: Failure
[Interrompi per questo errore] 	

ajax.send(dati);
e su chrome:
codice:
XMLHttpRequest cannot load http://localhost/ajax2.php. Origin null is not allowed by Access-Control-Allow-Origin. ajax3.html:33
Uncaught Error: NETWORK_ERR: XMLHttpRequest Exception 101
Pare da quello che ho trovato che lo dovrebbe dare quando non trova lo script php, ma il percorso è giusto, è sempre quello, e anche il browser in quel percorso lo trova..

intanto ho capito come mai l'innerHtml non andava e come farlo ricevere correttamente allo script, usando ajax.send('dati='+dati) e poi $dati=$_POST['dati'] .
L'unica cosa che anche mentre "andava" non avevo ancora capito era come mai non entrasse in "ajax.onreadystatechange = function() {" e di conseguenza non mi dasse l'alert e la risposta..