2011-06-17 90 views
1

我在这里有点困难;我使用js动态创建选择框,但我需要Ajax来填充选项。到目前为止,我的代码返回undefined,我坦率地不知道该怎么做。我的PHP返回的信息很好,但JS不解析它。另一组眼睛或另一个充满知识的大脑将在这里受到赞赏;动态填充动态创建的选择列表

function getSkilllist(group) { 
    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) { 
      return xmlhttp.responseText; 
     } 
    } 
    xmlhttp.open("GET","skl_lst_gen2.php?group=" + group + "&t=" + Math.random(),true); 
    xmlhttp.send(); 
} 

function addInput(divName,group) { 
var skillst = getSkilllist(group); 
var newdiv = document.createElement('div'); 
newdiv.innerHTML = '<select name="ski[]">' + skillst + '</select> ..... 

功能的其余部分是好的,但VAR skillst被返回undefined如说,我想不通为什么。我认为它与字符串有关,但我无法弄清楚需要做什么。

+1

请记住,(正常)Ajax请求的异步* *,所以'你其他的代码继续'xmlhttp.send()后执行,而不必等待回应,然后从Ajax请求的响应稍后处理。所以你的'getSkilllist'函数根本不返回任何东西,'skillst'将会是未定义的,但是你的其他代码会继续,'div'被创建等。当Ajax响应进入你为'xmlhttp定义的匿名函数.onreadystatechange'将会执行,所以这就是你需要根据下面的答案创建'div'的地方。 – nnnnnn 2011-06-17 01:08:58

回答

1

你的函数不返回任何东西,这就是为什么它不起作用。试试这个:

function getSkilllist(group) { 
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 newdiv = document.createElement('div'); 
     newdiv.innerHTML = '<select name="ski[]">' + xmlhttp.responseText + '</select> ..... 

     //place in DOM here 
    } 
} 
xmlhttp.open("GET","skl_lst_gen2.php?group=" + group + "&t=" + Math.random(),true); 
xmlhttp.send(); 
} 

function addInput(divName,group) { 
getSkilllist(group); 
+0

这样做,谢谢。 – Daedalus 2011-06-17 01:47:25