Il mio livello di esperienza di ajax non è elevato, però ho capito come funziona e ti assicuro che non è in localhost, ma tutto da server remoto. Anzi confesso che è la mia prima applicazione ajax-php, però non mi pare male dato che funziona perfettamente con un solo browser attivo.

Praticamente i browser chiedono ogni secondo una risposta dal server che però dipende dalle variabili settate nella sua memoria. Quindi php risponde sempre, ma con dati generici che vengono aggiornati costantemente da casa a intervalli irregolari.

Se invece un browser fa una richiesta specifica di dati particolari, Ajax li chiede al browser con una richiesta specifica, non quella generica di ogni secondo, ma non gli possono arrivare subito perchè il php non li ha e deve aspettare il risultato da casa.

In effetti una risposta alla richiesta specifica il server la dà, penso, che è "", non avendo il server i dati richiesti in quel momento. Infatti ho provato anche con async: false e non si è bloccato lo script: quindi ha ricevuto "" e poi è andato avanti.

Il js va avanti e ricomincia la richiesta generica di ogni secondo, e in una di queste il php ha aggiornato le variabili e quindi invia la risposta specifica invece di quelle generiche. Solo che può inviarla a un altro browser che fa la stessa richiesta generica...
Cioè, se ci sono due browser che inviano ogni secondo un "action=dati", che sarebbe la richiesta generica, il php, quando ha recuperato i dati particolari richiesti da uno specifico browser, risponde con quei dati alla prima richiesta generica che gli arriva, non necessariamente quella del browser giusto però.

Grazie comunque per aver tentato di capire.
Ciao