Voy a disentir un poco. Antes de que existiera XMLHttpRequest los desarrolladores usábamos varias técnicas para comunicarnos con el servidor sin un refresco visible de la página. La técnica más popular era en efecto
Remote scripting con iframe. Sin embargo, no era la única, también podíamos
usar imágenes y archivos css combinados con cookies. Más tarde se popularizó otra técnica que para mí es la más efectiva, que se denomina javascript bajo demanda o rpc o inclusión dom, y que consiste en incluir vía dom un archivo javascript que apunta a un archivo en el servidor. Un ejemplo:
Código PHP:
<?php
if(isset($_GET['p'])){
switch($_GET['sel']){
case '1':
$ret=array('Final del Juego','Rayuela','El Señor de loas Anillos');
break;
case '2':
$ret=array('rock','new age');
break;
case '3':
$ret=array('español','php','javascript');
break;
default:
echo 'document.getElementById("pp").innerHTML="<select name=\"dos\" id=\"dos\"></select>";';
exit;
}
$html='<select name=\"dos\" id=\"dos\">';
foreach($ret as $v)
$html.='<option value=\"'.$v.'\">'.$v.'</option>';
$html.='</select>';
echo 'document.getElementById("pp").innerHTML="'.$html.'";';
exit;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>test</title>
<script>
function adjs(url){
oldsc=document.getElementById("old_sc");
if(oldsc)
document.getElementsByTagName('body')[0].removeChild(oldsc);
sc=document.createElement('script');
sc.id="old_sc";
sc.src=url+'&'+Math.random();
document.getElementsByTagName('body')[0].appendChild(sc);
}
</script>
</head>
<body>
<form id="form1" name="form1" method="post" action="">
<select name="uno" id="uno" onchange="adjs('?p&sel='+this.value)">
<option value="0">seleccionar</option>
<option value="1">libros</option>
<option value="2">música</option>
<option value="3">lenguaje</option>
</select>
<div id="pp"><select name="dos" id="dos">
</select></div>
</form>
</body>
</html>
La ventaja de esta técnica es que puede tranquilamente usarse para comunicaciones entre dominios diferentes, cosa que el XMLHttpRequest no soporta de manera eficaz todavía.
Incluso hay técnicas aún más bizarras que las mencionadas, un ejemplo:
http://www.anieto2k.com/2008/10/24/c...omain-con-css/
En conclusión, hay muchas técnicas que podemos usar además de los iframes ;)