La primera parte (Ajax) seria mas o menos asi:
Código Javascript
:
Ver original<style>
div.selecciones {display:block;}
div.containerSel1 {float:left;}
div.outputAjax {float:left;}
select {min-width:8em;}
</style>
<form action="../pruebas/test_selecciones.php" name="frm" id="frm">
<div id="selecciones">
<div id="containerSel1">
<SELECT name="clientes" id="clientes" size="3">
<option value="34">Juan Perez</option>
<option value="12">Maria Juarez</option>
</SELECT>
<div>
<div id="outputAjax">
<SELECT name="ubicaciones" id="ubicaciones" size="3">
</SELECT>
</div>
</div>
</form>
<script>
/*
Construye query para Ajax
@param objeto literal con las referencias a los elementos del formulario
@return query de la forma "edad= + edad + &peso= + peso + ..."
*/
function queryBuilder(o,encode)
{
encode = encode || false;
var params='',
c=0,
val;
for (prop in o)
{
if (prop == '__form__')
val = o[prop];
else
val = encode ? o[prop].value : encodeURIComponent(o[prop].value);
if (c==0)
params += prop+'='+val;
else
params += '&'+prop+'='+o[prop].value;
c++;
}
return params;
}
function ajaxPrepare(){
try{
// Opera 8.0+, Firefox, Safari
ajaxRequest = new XMLHttpRequest();
} catch (e){
// Internet Explorer
try{
ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try{
ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e){
alert("Error en Ajax");
return false;
}
}
}
}
/*
@param objeto literal con referencia a los elementos del formulario
@param action (url to submit)
@param async
*/
function ajaxByPost(object,action,async){
async = async || true;
var params = queryBuilder(object,true);
ajaxRequest.open("POST", action, async);
ajaxRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");
ajaxRequest.send(params);
}
/*
@param objeto literal con referencia a los elementos del formulario
@param action (url to submit)
@param async
*/
function ajaxByGet(object,action,async){
async = async || true;
var params = queryBuilder(object,false);
ajaxRequest.open("GET", action + '?' + params, async);
ajaxRequest.send(null);
}
/*
Comienzo del programa como tal
*/
window.onload = function ()
{
var ajaxForm = ajaxForm || {},
ubicaciones = document.getElementById('ubicaciones'),
outputAjax = document.getElementById('outputAjax');
/* Inicializo ajaxRequest */
ajaxPrepare();
/* Defino callback de Ajax */
ajaxRequest.onreadystatechange = function()
{
if(ajaxRequest.readyState == 4 && ajaxRequest.status == 200 ){
outputAjax.innerHTML = ajaxRequest.responseText;
}
};
/* Registro evento onChange para el Select de clientes */
document.getElementById('clientes').addEventListener("change", function (event)
{
var id = event.target.id;
ajaxForm[id]= event.target;
ajaxByGet(ajaxForm,frm.action);
});
}
</script>
Del lado de PHP lo primero es ve que te llega:
¿ Que debes hacer ahora ?
Enviar en lugar de ese volcado de $_REQUEST lo que necesitas a Javascript para construir el SELECT..OPTIONS de UBICACIONES o bien (no es tan buena la segunda opcion) generar en PHP todo ese HTML e imprimirlo