那是因为你没有采用异步操作
因为,远程的xml并没有全部下载到本地.
但是加上alert后,相当于在客户端等待了几秒中,这个过程中数据已经传输完毕.
所以就是可以的.
function importXml(xmlFile) {
if (document.implementation && document.implementation.createDocument) { //For Mozilla FireFox
xmlDoc = document.implementation.createDocument("", "", null);
xmlDoc.onload = createSel;
}
else { //For Internet Explorer
xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
                  xmlDoc .async = false;
xmlDoc.load(xmlFile);
xmlDoc.onreadystatechange = function () {
if (xmlDoc.readyState == 4)
createSel();
                  
}
  }}

解决方案 »

  1.   

    http://cds.gameres.com/samples/menusample.htmXML+XSL的动态菜单例子,已经封装好接口了,调用简便。
    运行基础:IE6以上。
      

  2.   

    我试了一下,果然有这个问题,可能是IE的bug.那个时刻field.options[3].selected属性可读,但不可写.上次我大量改变图片的alt属性时,也遇到类似的问题.
    现在你的这个问题可以这样解决,把选中第四项的操作加一个0.1秒延时,就没有这个问题了.field.options[3].selected = true; 
    改为:
    setTimeout("document.getElementById('test').options[3].selected = true",100);
      

  3.   

    To:ljhyp_cn(香草山牧民) ,我认为你说的可能是对的.但你贴的代码,我放上去怎么没反应,请问测试过吗???没有别的意思,我只是想知道问题究竟出在哪里?
      

  4.   

    经过测试,ljhyp_cn(香草山牧民)没有说到实际问题.
    测试如下,将创建对象的方法由XML数据改为数组数据(不使用XML),在浏览器中单独运行下面函数,问题依旧,说明和XML无关,即说明此处和async属性无关.
    function createSel() {
    arr=new Array("0","1","2","3","4","5","6","7","8","9");
    var field = document.getElementById("test"); for (var i=0; i<arr.length; i++) {
    var op = document.createElement("option");
    op.value = arr[i];
    op.innerHTML = arr[i];
    field.appendChild(op);
    }
    field.options[3].selected = true; //问题语句?!
    }
      

  5.   

    TO: ljhyp_cn(香草山牧民)
    感谢各位的支持!xmlDoc .async = false;这个我原先一直不知道具体是干什么用的,原来是异步提交。看来得看看ajax了。
    对于需要载入xml文件少的情况下,该方法奏效;对于多的,好像还是载不完全,但依然还是要谢谢。继续解决中
      

  6.   

    并不是ljhyp_cn(香草山牧民)所说的问题,关于xmlhttp的async,可以查阅msxml sdk help“async property”关键字。
    async在默认情况下是true的,也就是异步状态。
    异步情况下可以避免超时和长时间的等待带来的麻烦。而以下代码实际上已经指定了数据在读取完整后再执行createSel()函数。
    xmlDoc.onreadystatechange = function () {
    if (xmlDoc.readyState == 4)
    createSel();
    }
     }再说说ljhyp_cn(香草山牧民)的代码,其实只是将异步改为同步,这样的情况下,下面的代码是多余的,其最终结果和楼主代码是一致的。
    xmlDoc.onreadystatechange = function () {//多余的
    if (xmlDoc.readyState == 4)
    createSel();
                      
    }
     }
    最后说说我的测试结果,我测试楼主的代码后并没发现楼主所说的问题,可以正常运行。(用这种方式建立HTML,很麻烦的做法,真有这必要吗)
      

  7.   

    刚找回我原来的ID,感谢大家支持,请看我的总结
    http://bbs.51js.com/viewthread.php?tid=48348&fpage=1&highlight=
    八楼回复
      

  8.   

    你还不明白?你的问题和XMLHTTP没关系!
    只是你的建立HTML的方式就有可能会遇到这种问题,之前也看别人问过类似问题。还有,我那个范例方便比你上面的代码方便很多啊。用XML建立菜单由JS来做,其实比XSL麻烦很多。而且还有你遇到的问题存在。