0

我有一个对 servlet 的 ajax 调用,它在服务器端构造一个 HTML 下拉列表并将其返回给客户端,即 jQuery Ajax 调用。那么如何得到响应。我的 Ajax 调用是:

$.ajax({
        type : "GET",
        url : "/tool/updateTagMap",
        data :  "submit=getTagList",
        datatype : "json",
        success : function(data) {
            alert(data);
        }
    });

和服务器端代码

   else if ("getTagList".equalsIgnoreCase(submit)) {
     List<Tag> tagList = DBUtil.getTagList();
     String tagCombo ="<select name='tagId' class='tagIdClass'>";
     for(Tag tag : tagList ){
       tagCombo += "<option value=" + tag .getTagId() +">"+ tag.getTag()+ "</option>";
     }
     tagCombo += " </select>";
     response.setContentType("text/plain"); 
     response.setCharacterEncoding("UTF-8");
     response.getWriter().write(tagCombo);
  }

但在警报我得到整个HTML?任何想法?如何仅获取下拉html?

4

2 回答 2

1

就像你有一个 id="dummydiv" 的 div

并且您在可变数据中获得了 ajax 的响应,那么您需要这样做。$('#dummydiv').html(数据);

于 2013-09-12T10:09:25.050 回答
0

您误解了 Ajax 成功查询、JSON 返回对象以及如何将其应用于网页的文档对象模型之间的关系。

在您的 ajax 方法中,您有一行

dataType : "json"

这说明jQuery.ajax()期望以 Javascript Object Notation 对象的格式返回,格式为

{
  key0 : value0,
  key1 : value 1,
  ...  : ...
  keyn : value n
}

为了将其应用于 DOM,假设您的页面上有以下 HTML:

<div id = 'select_container'
  <select id = 'dropdown_select'></select>
</div>

如果您的 JSON 返回有效,您可以在success函数中执行类似于

success : function(data){
  var appendString = "";
  for (var i = 0; i < data.length; i++)
    appendString += "<option id = 'option_" + i + "' >" + data[i].value + "</option>";

  $("#dropdown_select").append(appendString);
}

此示例接受一个有效的 JSON 返回对象,构建一个有效的 HTML 字符串,并使用该append()方法将其应用于选择下拉列表。如果列表为空,则成功函数的内容将从 0 .. n 开始应用,但如果列表已有选项值,则新元素将添加到下拉选择选项的末尾。

您的问题是您在 Ajax 查询方法中返回 HTML。将其转换为将名称、id 和其他信息返回为有效的 JSON 以应用受此查询影响的 DOM 元素。

于 2013-09-12T10:46:25.097 回答