Ciao, è corretto ciò che ti ha indicato badaze ma probabilmente non si è afferrato bene il concetto principale.
Cerco di chiarire.
Gli elementi del DOM (cioè i tuoi div, così come tutto il resto della pagina) vengono creati, e sono quindi manipolabili via script, man mano che la pagina si carica. Tali elementi sono creati nell'ordine in cui sono scritti. Devi assicurarti, quindi, che gli elementi interpellati nello script, siano stati creati e siano quindi disponibili.
Ora prendiamo questa parte:
codice:
<script type="text/javascript">ajax("A","B");</script>
<div id="A"></div>
Quando chiami la tua funzione ajax(), al cui interno usi getElementById() per riferirti al div A, è prevedibile che tale div non sia ancora presente nel DOM perché è posto dopo il richiamo della funzione stessa.
Devi quindi richiamare la funzione dopo che il div è creato.
Puoi fare in diversi modi. Puoi ad esempio usare un evento onload per lanciare il tuo script quando tutta la pagina è caricata, ma in questo caso la cosa più semplice è spostare il tag script dopo il div (come indicato da badaze):
codice:
<div id="A"></div>
<script type="text/javascript">ajax("A","B");</script>
Questo è il concetto principale e da qui non si sfugge.
Detto questo c'è comunque da considerare che getElementById() viene richiamato dall'evento di risposta Ajax (onreadystatechange). Tale evento (essendo "asincrono" per definizione) normalmente NON viene eseguito all'istante, ma si verificherà (a grandi linee) dopo la risposta del server.
In tal caso è anche possibile che la pagina abbia continuato a caricarsi e che il div in questione sia stato creato e sia disponibile, ma questo non deve comunque essere un pretesto per "eludere" il concetto menzionato sopra. Infatti potrebbe anche essere che, per una questione di cache o per qualsiasi altro motivo, l'evento di risposta Ajax si verifichi prima che siano effettivamente creati gli elementi da manipolare via script, dando quindi dei risultati imprevedibili.
Ora, sei sicuro di aver fatto quanto ti è stato indicato?
Incontri ancora problemi?
EDIT:
un altro grande errore che ho visto solo ora.
Quando dichiari la variabile xmlhttp, dovrebbe essere una variabile locale (cioè visibile solo dentro la funzione), mentre invece è una variabile globale, per cui l'oggetto Ajax che gli stai attribuendo, viene sovrascritto con quello creato nelle successive chiamate della stessa funzione.
Per definire variabili locali devi usare var:
codice:
function ajax(id, url) {
var xmlhttp;
if (window.XMLHttpRequest)
xmlhttp = new XMLHttpRequest();
else
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
Per tale motivo riscontri il problema che hai indicato:
in C compare quello che doveva comparire in A)