如何在jquery中使用回调数据获取对象?

时间:2014-01-05 18:06:25

标签: java javascript jquery jsp servlets

我正在使用jquery通过servlet从数据库中获取值。我的脚本中的回调函数为我提供了来自database的原始信息。我可以将这些值附加到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>

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

enter image description here

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

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

3 个答案:

答案 0 :(得分: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');
});
来自玻利维亚拉巴斯的欢呼声

答案 1 :(得分:0)

假设您可以以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格式,你能显示你的数据是什么样的吗?

答案 2 :(得分:0)

请勿在{{1​​}}查询中使用+ !!

它旨在使用

之类的东西
PreparedStatement

这是因为SQL injection。如上所述,逃避该注入类型的最简单方法是使用准备好的语句正确。请阅读有关使用String sql1 = "SELECT * FROM state WHERE country_ref=?" PreparedStatement pst1 = db.getConnection().prepareStatement(sql1) pst1.setInteger(0,country_ref); ResultSet j = pst1.executeQuery();

的更多信息