paolo@bimodesign.com | +34 608 61 64 10

JS / Ajax / Jquery / Json

        

Ajax - Un esempio base

In questo semplice esempio, cambieremo una combo box attraverso l'uso di Ajax

Prima di tutto definiamo i 3 file su cui agiremo

  • principale.php
  • XmlHttp.php
  • GoogleMapsReloadCity.php

Questo il codice di principale.php

<td>
	<select class="texto_combos" id="state" onchange="java-script:fnCallByAjax('GoogleMapsReloadCity.php','new_state='+this.value,'cityDiv')">
	<?php
       foreach ($aStateList as $key=>$value){
                   if($key==$state_default){
                        $selected="selected";
                    }else{
                        $selected=false;
                        }
                    echo "<option $selected value='$key'>$value</option>";
                }
	?>
	</select>
</td>
<td><?php echo $lab_city;?>:</td>
<td>
	<div id="cityDiv" name="cityDiv">

	<select class="texto_combos" style="width:100px" id="city">
    <?php
            foreach ($aCityList as $key=>$value){
                    if($key==$city_default){
                        $selected="selected";
                    }else{
                        $selected=false;
                    }
                    echo "<option $selected value='$key'>$value</option>";
                }
        ?>
    </select>

    </div>
</td>

A riga 1 abbiamo la definizione della funzione fnCallByAjax, che verra' chiamata al cambio del combo box. Questa funzione, che vedremo tra poco, andra' a sostituire il codice presente nel div cityDiv

Questo il codice di XmlHttp.php


function XmlHttp(){
var oRequest;
    if (window.XMLHttpRequest) {
        oRequest = new XMLHttpRequest();
        return oRequest;
    } else if (window.ActiveXObject) {
        //"MSXML2.XMLHTTP","MSXML2.XMLHTTP.3.0",
        var arrSignatures = ["MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.5.0","Microsoft.XMLHTTP"];
        for (var i=0; i < arrSignatures.length; i++) {
            try {//alert(arrSignatures[i]);
                var oRequest = new ActiveXObject(arrSignatures[i]);
                return oRequest;
            } catch (oError) {//alert(oError);
            }
        }
    }
    throw new Error("MSXML is not installed on your system.");
}

function addPostParam(sParams, sParamName, sParamValue) {
    if (sParams.length > 0) {
        sParams += "&";
    }
    return sParams + encodeURIComponent(sParamName) + "=" + encodeURIComponent(sParamValue);
    /*var val=escape(sParamValue);
    return sParams + (sParamName) + "="
                   + (escape(val));*/

}

function fnCallByAjax(sPath,sParam,div){
1    var oRequest=XmlHttp();
2    oRequest.open("post",sPath,false);
3    oRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
4    oRequest.send(sParam);

5    var box = document.getElementById(div);
6    box.innerHTML="";
7    box.innerHTML = oRequest.responseText;
}

Dopo le definizioni della chiamata ad Ajax, differente tra FF e IE, a riga XXX abbiamo la definizione della funzione fnCallByAjax, che accetta come parametri

  • sPath
  • Il nome della funzione/file da eseguire
  • sParameter
  • Il valore attuale
  • div
  • Il nome del div, ovvero la parte che si andra' a sostituire della pagina principale.php

A riga 2 effettuiamo la chiamata in POST

a riga 4 inviamo i parametri

A riga 6 cancelliamo il precedente contenuto

a riga 7 aggiungiamo il nuovo.

Infine questo il codice di GoogleMapsReloadCity.php

$oGoogleMap=new GoogleMap();

$aCityList=$oGoogleMap->getGoogleCityList($_POST[new_state]);

foreach ($aCityList as $key=>$value){
    if($key==$city_default){
        $selected="selected";
    }else{
        $selected=false;
    }
    echo "<option $selected value='$key'>$value</option>";
}

Dove dopo aver instanziato la classe GoogleMap per il recupero della lista delle citta' (parte che non interessa per l'argomento che stiamo trattanto), scriviamo il codice che andra' a sostituire quello presente nel div del principale.php

Notare che e' identico a quello gia' presente. Questo per non modificare la struttura della pagina stessa.

Questo era un primo esempio base e piuttosto semplice, ma che permette di capire cosa sia una chiamata ad Ajax e quale il suo obiettivo.