2012-04-08 62 views
1

当前我正在尝试动态地填充网站。当我遍历代码时,它完美无缺。但是,当我按照预期在页面加载上运行它时,它不起作用。相关的代码是:Javascript/AJAX仅适用于调试

<body onload="populate_all(string)";> 

function populate_all(string) 
{ 
    var split = string.split(" "); 
    for(i = 0; i < split.length; i++) 
    { 
    populate(split[i], 'main'); 
    } 
} 

function populate(string, location) 
{ 
    if (string.length==0) 
    { 
    document.getElementById(location).innerHTML=""; 
    return; 
    } 

    if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
    else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    xmlhttp.onreadystatechange=function() 
{ 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
     var divTag = document.createElement("div"); 

     divTag.className ="info"; 

     divTag.innerHTML = xmlhttp.responseText; 

     document.getElementById(location).appendChild(divTag); 
    } 
} 
xmlhttp.open("GET","populate.php?string="+string,true); 
xmlhttp.send(); 
} 

我已经读过这个问题,足以肯定PHP不是问题。基本上说:我在循环中多次使用AJAX运行JavaScript函数,并且代码仅在调试时才起作用。谢谢您的帮助!

+0

定义“它不起作用”。 – 2012-04-08 14:21:28

+0

对不起,“它不工作”不是很清楚。而不是创建我想要的div,这是几个具有不同信息的div,它只创建最后一个div的最后一个div或四个实例。 – NSchulze 2012-04-08 16:03:27

回答

0
  1. Declarexmlhttp本地。
  2. 使用不同变量名称为locationlocation是一个全局变量,它拥有操作当前位置的属性和方法。

    function populate(string, s_location) { 
        var xmlhttp; 
    

目前,你保持在populate方法覆盖xmlhttp变量。结果,xmlhttp对象指向最后的请求。

+0

这个伎俩!当事情很简单时,我喜欢它。谢谢! – NSchulze 2012-04-08 16:04:29

0

对我来说是这样的:Use javascript variable outside success function

当进行到$ .getJSON等电话,使用调试器附着它修复/改变的时机和范围。我正在更新由定时后台事件触发的xhr响应中的表格单元值,并且我需要在嵌套成功函数中进行单元更新。调试器附带的东西神奇地工作。