2013-11-02 42 views
0

這裏我使用json + ajax + struts2來創建相關下拉菜單。首先下降有一些價值基於這些價值第二下拉正在加載。在第二個下拉菜單中,每次點擊第一個下拉菜單的數據(這裏我使用的是onchange事件)後,我得到了未定義的響應值。我從struts2獲取ajax響應作爲對象。我想將這些對象轉換爲第二個下拉列表的字符串(它應該包含id和name)。我不知道如何將對象轉換爲字符串。我嘗試了一些在stackoverflow和谷歌搜索的鏈接,但它不適合我。這裏是我的代碼:將Ajax響應設置爲使用json下拉

Struts2的:

  second_drop_downList=retrieveSecond(); 

    ServletActionContext.getResponse().setContentType("text/html"); 
    PrintWriter out = ServletActionContext.getResponse().getWriter(); 
    out.print(second_drop_downList); 
    out.flush(); 

我在這裏得到正確的大小多少數據存在於數據庫中。我通過上面的代碼將這些數據傳遞給ajax響應。

這裏是我的Ajax代碼:

$(".country").change(function() { 
     var id = $(this).val(); 
     var dataString = 'id=' + id; 


     $.ajax({ 
      type : "POST", 
      url : "sendDropdown.action", 
      data : dataString, 
      success : function(response) { 
       alert(response); 
      var myJSONText = JSON.stringify(response); 
      //alert(myJSONText); 
      var obj = JSON.parse(myJSONText); 
      alert(obj); 
      var html = '<option value="">select Section</option>'; 
      for (var i = 0; i < obj.length; i++) { 
      html += '<option value="'+obj[i].id+'">' + obj[i].dep_name 
      + '</option>'; 
      } 
      html += '</option>'; 

      $('.city').html(html); 
      } 
     }); 

    }); 

我在這裏得到響應爲十六進制格式(警報)。但在下拉我收到未定義。

+0

在struts2動作中寫入響應,這是一個非常糟糕的方式。 –

回答

0

我建議你使用Struts2 DoubleSelect

這裏有一個很好的example

如果名單真的很大的話,那就選擇對你怎麼樣,第二選擇列表中的問題。

你當然可以使用ajax,但擔心的是你想要接收的數據類型。

可能你想使用Struts2 Jquery Select Tag作爲第二個選擇,它實際上在響應中發送JSON。

或者你想在選擇第一個選擇時觸發一個ajax請求,然後在響應中獲得完整的第二個選擇。