0

我在struts2中创建双选框,当我在第一个选择框中选择国家时,它会在第二个选择框中根据国家/地区获取城市。在我onchange event的第一个选择框的 JS 函数中,我通过使用 ajax 发送方法传递选定的值并发送数据到操作,基于我在我的操作类方法中创建一个城市列表的事实。那么如何访问 Javascript 中的列表,以便将其设置为第二个选择框?

这是我的代码:

<script>
function loadCity(str) {
  var xmlhttp;
  if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
  } else { // code for IE6, IE5
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.open("GET", "loadcity.action?country=" + str, true);
  xmlhttp.send();
  var dat = document.getElementById("cityList").value.toString();
  window.alert(dat);
} 
</script>                                                                                      

<s:select name="country" id="country" list="countryList" label="country" onchange="loadCity(this.value)">
</s:select>
<s:select name="city" label="City" id="cityList" list="cityList">
</s:select> 

这是我的动作类方法:

public String loadcity() {
  cityList = new ArrayList();
  cityList.add("New Delhi");
  cityList.add("Mumbai");
  cityList.add("Moradabad");
  setCityList(cityList);
  return NONE;
}

这里cityList有正确的值,但是当我在我的 JS 函数中使用它时,它显示为null.

4

1 回答 1

0

您没有提供太多信息,但是:NONE从操作方法返回意味着不会发生进一步的处理,也不会返回任何结果。

您实际上也没有任何会导致第二个选择框被修改的事情;如果您想滚动您自己的基于 Ajax 的双选,您需要编写 JavaScript 来实际对操作结果执行某些操作。如何做到这一点的例子不胜枚举。

顺便说一句,您可能希望使用 JSON 结果来使事情变得更容易一些。

更简单的是,使用S2 jQuery 插件,其中包含一个基于 Ajax 的双选示例

IMO 在原始 JS 中手动执行 Ajax 是徒劳的。

于 2013-04-10T15:13:45.567 回答