Puedes retornar un array de valores desde PHP o bien formar al
<select>
con las opciones. Por ejemplo, supongamos que el
<select>
está en un
<div>
, entonces, lo que tendrías que hacer en ambos casos sería algo similar a lo siguiente:
Código Javascript
:
Ver originalvar ajax = new XMLHttpRequest(), respuesta, propiedad, opcion, //Las variables a utilizar
select = document.querySelector("#ejemplo"); //Para el primer caso
div = document.querySelector("#contenedor"); //Para el segundo caso
ajax.open("GET", "ejemplo.php", true);
ajax.send();
ajax.addEventListener("load", function(){
if (this.status == 200){
//PRIMER CASO: Llenando al <select> con valores llegados en un objeto JSON
respuesta = JSON.parse(this.responseText);
select.innerHTML = "";
for (propiedad in respuesta){
opcion = document.createElement("option");
opcion.value = propiedad;
opcion.text = respuesta[propiedad];
select.add(opcion);
}
//SEGUNDO CASO: Reemplazando el <select> actual por uno nuevo llegado como respuesta
respuesta = this.responseText;
div.innerHTML = respuesta;
}
}, false);
Código PHP:
Ver original<?php
//PRIMER CASO
$array = [
'valor1' => 'Texto1',
'valor2' => 'Texto2',
'valor3' => 'Texto3',
'valorN' => 'TextoN',
];
//SEGUNDO CASO
?>
<select>
<?php
foreach ($array as $valor => $texto){
?>
<option value = "<?php echo $valor; ?>"><?php echo $texto; ?></option>
<?php
}
?>
</select>
En el primer caso, elaboras un array que contendrás índices y valores los cuales corresponderán a cada valor y texto de las opciones del
<select>
. Como no es posible devolver un array directamente, hay que codificarlo en formato JSON de tal forma que en la llamada asíncrona (AJAX) lo
parseas para obtener al objeto y así poder recorrer su lista de atributos y valores. En el segundo caso, solo tienes que formar al
<select>
en el archivo PHP y en la llamada asíncrona, solo tendrás que insertarla como contenido del contenedor.
NOTA: Los bloques de código en donde señalo que se trata del primer o segundo caso, es para que elijas solo uno de ambos bloques, no los dos a la vez.
Un saludo