2013-11-01 57 views
6

我正在研究j2ee應用程序。在我的應用程序中,我有一個下拉列表(或選擇元素)。我想用JSON數據填充這個下拉列表作爲Ajax響應。如何在JQuery中使用JSON數據填充dropdownlist作爲ajax響應

下面是我的代碼:生成一個JSON響應

服務器端代碼(json_source.java)。 :

package demo.model; 

import java.io.IOException; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.Statement; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import com.google.gson.*; 

/** 
* Servlet implementation class json_source 
*/ 
public class json_source extends HttpServlet { 
private static final long serialVersionUID = 1L; 


/** 
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
*/ 
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{ 
    JsonArray data_json=new JsonArray(); 

    Statement st_loginId=null; 
    ResultSet rs_loginId=null; 
    try 
    { 
     Connection con=null; 

     Class.forName("oracle.jdbc.OracleDriver"); 

     /* Connection String for "OPERWH"(exadata) Database */ 
     con=DriverManager.getConnection("jdbc:oracle:thin:*************","*****","*****"); 

     con.setAutoCommit(true); 

     st_loginId=con.createStatement(); 
     rs_loginId=st_loginId.executeQuery("select login_id \"LOGIN ID\" from user_access"); 
     //System.out.println("entered in frame_login_code"); 
     int login_val=0; 
     JsonObject json_response=new JsonObject(); 

     while(rs_loginId.next()) 
     { 
      login_val++; 
      JsonObject json=new JsonObject(); 
      json.addProperty("value", "login"+login_val); 
      json.addProperty("text", rs_loginId.getString(1)); 
      data_json.add(json); 
     } 
     System.out.println(data_json); 
     json_response.add("aaData", data_json); 

     response.setContentType("application/Json"); 

     response.getWriter().write(json_response.toString()); 

     System.out.println(json_response); 
    } 
    catch(Exception ex) 
    { 
     System.out.println("Exception occured during retrieval of Login_Id in ComboBox :"+ex); 
     ex.printStackTrace(); 
    } 
} 

/** 
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
*/ 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // TODO Auto-generated method stub 
} 

} 

並通過上述服務器端代碼成功地生成JSON數據:

{ 
    "aaData": [{ 
     "value": "login1", 
     "text": "kapils" 
    }, { 
     "value": "login2", 
     "text": "davidn" 
    }, { 
     "value": "login3", 
     "text": "alanp" 
    }] 
} 

和下面是我的客戶端代碼(source1.jsp),其生成Ajax請求:

(使用$ .ajax()):

<script type="text/javascript"> 
$(document).ready(function() 
{ 
$('#id_trial').click(function() { 

    alert("entered in trial button code"); 

    $.ajax({ 
     type: "GET", 
     url:"/demo_trial_application/json_source", 
     dataType: "json", 
     success: function (data) { 
      $.each(data.aaData,function(i,data) 
      { 
      alert(data.value+":"+data.text); 
      var div_data="<option value="+data.value+">"+data.text+"</option>"; 
      alert(div_data); 
      $(div_data).appendTo('#ch_user1'); 
      }); 
      } 
     }); 
    }); 
}); 

</script> 

<body> 

<div id="div_source1"> 
    <select id="ch_user1" > 
     <option value="select"></option> 
    </select> 
</div> 
<input type="button" id="id_trial" name="btn_trial" value="Trial Button.."> 
</body> 

或使用($ .getJSON()):

$.getJSON("/demo_trial_application/json_source", function (data) { 
    $.each(data.aaData, function (i, data) { 
     var div_data = "<option value=" + data.value + ">" + data.text + "</option>"; 
     alert(div_data); 
     $(div_data).appendTo('#ch_user1'); 

    }); 
}); 

現在,當我點擊按鈕(#id_trial),服務器端代碼執行成功,併爲創建結果JSON對象。 但我沒有得到使用jQuery的ajax調用的Success參數的回調函數中的「JSON響應」。

除了jQuery的ajax調用我也嘗試用$.getJSON函數來接收JSON響應..但我沒有得到JSON數據。

那麼請告訴我,如果我的代碼中有任何錯誤,以及如何使用上面的代碼獲取JSON數據並填充下拉列表。

我想填充我用Ajax響應JSON數據下拉列表。 請幫我解決這個問題......它對我的應用非常緊迫。

+0

你看着螢火蟲,看看客戶端json是否到達? –

+0

套件@我檢查了您的ajax代碼與php json數據,其工作正常。我正在使用jQuery v1.10.2。我不認爲JavaScript有錯誤。 –

+0

檢查your.each()循環http://stackoverflow.com/questions/2342371/jquery-loop-on-json-data-using-each –

回答

13

嘗試更改jquery方法變量,它可能導致問題(即,您正在使用來自ajax回調的data變量PLUS然後試圖將它分配給在jquery方法中的item對象 - 更改爲obj):

 $.ajax({ 
      type: "GET", 
      url:"/demo_trial_application/json_source", 
      dataType: "json", 
      success: function (data) { 
       $.each(data.aaData,function(i,obj) 
       { 
       alert(obj.value+":"+obj.text); 
       var div_data="<option value="+obj.value+">"+obj.text+"</option>"; 
       alert(div_data); 
       $(div_data).appendTo('#ch_user1'); 
       }); 
       } 
      }); 
     }); 
+0

+1,在他的代碼中發現了小怪癖,我thnk這將工作... –

+0

吉姆,在那種情況下,我已經嘗試過這個工具包代碼,它工作正常,唯一的變化是,我用PHP服務器端代碼來生成json對象。它是否給了很多不同的地方?你能指導我嗎? –

2

我用 「爲」

var List; 
jQuery.ajax({ 
    url: "/demo_trial_application/json_source", 
    type: "POST", 
    dataType: "json", 
    async: false, 
    success: function (data) { 
    List = data.aaData 
     $('#ch_user1').empty(); 
     $('#ch_user1').append('<option value="">All</option>'); 
     for (i in List) { 
      $('#ch_user1').append('<option value="' + List[i].value + '">' + List[i].text + '</option>'); 
     } 
    } 
}); 
0
<div class="col-lg-4"> 
             <%--<input type="text" class="form-control" id="txtGender" />--%> 
             <select class='form-control DropDown' id="txtGender"></select> 
            </div> 

    -------------------------------------------------------------------------------- 

    $(document).ready(function() { 
       $.ajax({ 
        type: "POST", 
        url: "AjaxCallGrid.asmx/GetDropDown", 
        dataType: "json", 
        contentType: "application/json; charset=utf-8", 
        success: function (result) { 
         $('.DropDown').empty(); 
         $('.DropDown').append("<option value='0'>---Select---</option>"); 
         $.each(result.d, function (key, value) { 
          $('.DropDown').append($("<option></option>").val(value.iD).html(value.firstName)); 
         }); 
        } 
       }); 
      }); 
    ------------------------------------------------------------------------- 
    [WebMethod] 
     public List<Students> GetDropDown() 
     { 
      DataTable dt = new DataTable(); 
      List<Students> result = new List<Students>(); 
      using (SqlConnection con = new SqlConnection(@"Data Source=DOS-PC\MARJI;Initial Catalog=examples;Integrated Security=True")) 
      { 
       using (SqlCommand cmd = new SqlCommand("select id,firstname from Students ", con)) 
       { 
        con.Open(); 
        SqlDataAdapter da = new SqlDataAdapter(cmd); 
        da.Fill(dt); 
        if (dt.Rows.Count > 0) 
        { 
         for (int i = 0; i < dt.Rows.Count; i++) 
         { 
          result.Add(new Students 
          { 
           iD = Convert.ToInt32(dt.Rows[i]["id"].ToString()), 
           firstName = dt.Rows[i]["firstname"].ToString() 
          } 
           ); 
         } 
        } 
        return result; 
       } 
      } 
0

我們可以填充下拉像下面。我猜你對我來說很容易。

var options = $("#options"); 
    $.getJSON("/Country/GetAll/", function(response) { 
     $.each(response, function() { 
     options.append($("<option />").val(this.Id).text(this.Name)); 
    }); 
    }); 
0

與Laravel工作,這是我的解決方案:

$("#YOUR_DIV").on("change", function(){ 
    var selected = $(this).val(); 
    makeAjaxRequest(selected); 
}) 

function makeAjaxRequest(opts){ 
    $.ajax({ 
     type: "GET", 
     url : '{{ action('[email protected]_FUNCTION') }}', 
     data: { opts: opts }, 
     success: function(data) { 
      NEW_JS_FUNCTION(data); 
     } 
    }); 
} 

function NEW_JS_FUNCTION(params) { 
    $('#YOUR_DIV').empty(); 
    $('#YOUR_DIV').append('<option value="">ALL</option>'); 

    params.forEach(function(entry){ 
     $('#YOUR_DIV').append('<option value="' + entry.KEY+ '">' + entry.TEXT + '</option>'); 
    }); 

} 

它的工作原理。希望這可以幫助。

相關問題