【问题标题】:how to get object using callback data in jquery?如何在 jquery 中使用回调数据获取对象?
【发布时间】:2014-01-05 18:06:24
【问题描述】:

我正在使用jquery 通过servlet 从数据库中获取值。我脚本中的回调函数为我提供了来自数据库的原始信息。如何将这些值附加到jsp 中的选择选项。

这是我的 Retrive_country servlet 代码:

String sql1 = "SELECT * FROM state WHERE country_ref="+countryref+"                      
PreparedStatement pst1 = db.getConnection().prepareStatement(sql1);
ResultSet j = pst1.executeQuery();

while (j.next()) {
    state_id = j.getString(1);
    state = j.getString(2);
    country_ref = j.getString(3);
    location.setState(state);
    location.setState_id(state_id);
    location.setcountry_ref(country_ref);
    pw.println(state_id);
    pw.println(state);
    pw.println(country_ref);
}

这是我的脚本:

<script>
$(document).ready(function(){

  $("#country_id").change(function() {
      var xyz = $("option:selected").val();
      alert(xyz)
      $.get("../Retrive_country?countryREF="+xyz",
        {countryREF : xyz }, 
            function(data){
              console.log(data);
                alert("Data: " + data);
            });

   });
});
</script>

这是我的 jsp:

<div class="span2 clear">
<select name="country_id" id="country_id">
<option>-select-</option>


<option id="blabbb">1</option>
<option id="blabbb">2</option>
<option id="blabbb">3</option>

</select></div>

<div class="span2 clear">
<select name="state_ref" id="state_ref">
<option ></option>
</select></div>

这是我在控制台中的输出:

所有字符串都是状态值,整数是 stateid。

我希望它们在 jsp 中单独使用。

【问题讨论】:

  • 你有一些后端响应示例吗?
  • 您能以 json 格式发送您的回复吗?

标签: java javascript jquery jsp servlets


【解决方案1】:

您最好使用后端 JSON 编码器。但是这个手动编码也应该可以工作:

后端代码:

pw.println("[");
while (j.next()) {
    state_id = j.getString(1);
    state = j.getString(2);
    country_ref = j.getString(3);
    pw.println("{stateId: " + state_id + ", stateName: \"" + state +"\"},");
}
pw.println("]");

(我假设你的 state_id 是整数)

客户端代码:

$("#country_id").change(function() {
   var xyz = $("option:selected").val();
   $.get("../Retrive_country?stateadd_1=none", {countryREF : xyz }, function(data){
       var states = eval(data);
       $('#state_ref').empty();
       $.each(states, function(index, state){
            $("<option></option>")
                .attr("value", state.stateId).text(state.stateName)
                .appendTo('#state_ref');
       });           
   }, 'text');
});

干杯,来自玻利维亚拉巴斯

【讨论】:

  • 它不工作,alert(state.stateName);输出为“未定义”
  • @Edgar: 将 'text' 更改为 'json' 然后你不必评估(数据)
  • @alex。嗨,不幸的是,服务器没有进行真正的 JSON 编码,而是手动进行。例如,尾随逗号会因数据类型json 而失败,就是这种情况。 eval 更宽松。
  • @Edgar:这次它不工作了,甚至没有发出警报。
  • @Edgar: 你能解释一下为什么你在 pw.println("{stateId: " + state_id + ", stateName: \"" + state +"\"}, );
【解决方案2】:

假设您可以以 json 格式发送数据。你可以这样做:

var Myselect = $('#state_ref');
$.getJSON("../Retrive_country?stateadd_1=none",
    {countryREF : xyz } ,function(data){
     $.each(data, function(key, value) {   
     Myselect
     .append($("<option></option>")
     .attr("value",key)
     .text(value)); 
  });//end each
 });//end get

如果不是 json 格式,你能展示一下你的数据是什么样子的吗?

【讨论】:

  • 这不起作用,我在回调“数据”中检索到所有信息我想要的只是如何分离来自 servlet 的数据。我有三个字符串 state、state_id、country_ref 来自 servlet 但是他们都一起进来回调函数我怎样才能再次将它们分开以便我可以在我的jsp中使用它们。
  • 当你做console.log(data)时,你看到了什么?如果是 json,那么通常 data.state, data.state_id, data.country_ref 就可以了。
  • 如果你能告诉我console.log(data)的结果,我可以告诉你如何提取值。只需告诉我输出数据的格式即可。
  • 它按 state_id,state,country_ref 的顺序显示第一个值,然后是第二个值等等..
  • 值是否用逗号分隔?行呢,它们也分开了吗?你能展示一个样本吗...?
【解决方案3】:

不要在PreparedStatement查询中使用+!!

它的目的是使用类似的东西

String sql1 = "SELECT * FROM state WHERE country_ref=?"
PreparedStatement pst1 = db.getConnection().prepareStatement(sql1)
pst1.setInteger(0,country_ref);
ResultSet j = pst1.executeQuery();

因为SQL injection。如上所述,逃避该注入类型的最简单方法是正确使用准备好的语句。请阅读更多关于使用PreparedStatement

【讨论】:

  • 这是一个真实的陈述,但这不是问题的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-27
  • 2011-10-21
  • 1970-01-01
  • 2020-01-29
  • 1970-01-01
  • 2019-05-06
  • 1970-01-01
相关资源
最近更新 更多