I think the fact that it works for browsers other than IE is because of tolerance, not an IE bug.
(Note this day, I've officially said that perhaps IE got it right and others did not. It's a BANNER day.)
I don't believe that it is wise to ever deal with the innards of a SELECT with innerHTML. I've not tried it, but it made furrowed my brow when I saw the code. You should always deal with SELECT options as objects hanging off it, like you did in the second case.
I am not entirely sure what you mean, but I think what you are asking is how to get a response from an AJAX query and put it into a select box.
The best way, IMO, is to json_encode on the php side and decode it as an array client side.
So in PHP, you'd create your array, encode it and send it back:
$arr[] = 'this';
$arr[] = 'is';
$arr[] = 'a';
$arr[] = 'test';
echo json_encode($arr);
... then in JS you'll need to convert that into an array object just so:
(assuming you have the returned string in your hands already as "retStr")
var myArr = eval('(' + retStr + ')');
var max = myArr.length;
var targetSelect = document.getElementById('theSelect');
targetSelect.options.length = max;
for (var i=0; i<myArr.length; i++)
{
targetSelect.options[i].value = myArr[i];
targetSelect.options[i].text = myArr[i];
}
... and you're all set. Hope that spins your gears a bit.