innerHTML修改在`alert`之后可见,但不是

时间:2013-01-26 00:05:13

标签: php javascript html

所有

我有一个相当简单的javascript脚本,可以更改我的html页面中的一些文本。奇怪的是,只有在我有警报时才会更改数据。如果我将警报隐藏为注释,则数据不会显示在网页上。具体来说,以下是JS代码的相关部分:

var index=0;
var xmlObject=null;

function calcIndex(){
  return index++;
}

function showNextName(){
  retrieveNextName();
  var someText = xmlObject.getElementsByTagName("name")[0].childNodes[0].nodeValue;
  document.getElementById('nextName').innerHTML=someText;
}

function retrieveNextName(){
  var index=calcIndex();
  request = createRequest();
  if (request == null) {
    alert("Unable to create request");
    return;
  }
  var url= "Ajax_retrieveName.php?index=" + index;
  request.open("GET", url, true);
  request.onreadystatechange = createXml;
  request.send(null);
  alert("abc");
  //If the alert above is missing, the html is not modified...
}

function createXml() {
  if (request.readyState == 4) {
    if (request.status == 200) {
      xmlObject = request.responseXML;
    }else{
      return;
    }
  }else{
    return;
  }
}

有谁知道可能导致什么?

1 个答案:

答案 0 :(得分:0)

问题是XML对象不能立即可用,因为请求尚未完成,因此尚未调用回调。 (警报允许请求在您将警报框计时之前的时间内完成。)

更好的解决方案是拥有一个updateElementHtml(newHtml)函数,并在回调中从调用该函数。