您好,登錄后才能下訂單哦!
利用ajax怎么實現一個動態下拉框?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
示例:
<select> <option>信息一</option> <option>信息二</option> <option>信息三</option> <option>信息四</option> </select>
但是有些項目或者工程是需要將數據庫中的數據呈現出來并提供選擇的,下拉的內容會隨數據庫中數據的變化而變化。首先我們有asp組件可以幫我們做這這件事情,DropDownList組件,只需要將數據庫中查詢得到的數據添加進該組件中,在前臺即可以顯示出動態下拉的效果。如果想更有新意,不依賴于傳統組件,ajax就是個不錯的選擇。下面一步步來通過ajax實現動態下拉的效果。
1.js發出ajax請求:
$(document).ready(function () { $.ajax({ timeout: 3000, async: false, type: "POST", url: "WareHouse.ashx", dataType: "json", data: { warehouse: $("#issued_sub_key_c").val(), }, success: function (data) { for (var i = 0; i < data.length; i++) { $("#issued_sub_key_c").append("<option>" + data[i].Name + "</option>"); } } }); });
ajax請求WareHouse.ashx(一般處理程序)來獲得數據,請求成功后將返回的json數據附加到id為issued_sub_key_c的select標簽。值得注意的是這里將async的屬性改為了false,async的默認狀態為true,即為異步。值改為false就是同步了。但是當async為false的時候,ajax請求完數據之前,瀏覽器一直處于鎖死狀態,這樣會讓使用者認為程序崩潰了,所以就人為的添加了一個超時(timeout),這樣就不會出現程序崩潰的假象。回到話題開始,為什么要將async改為false呢?原因就是當ajax是異步請求的時候進入到頁面后出現下拉框數據還未同步,下拉框是空白數據(可以自己體驗體驗)。所以我們需要利用同步的特性并配合超時來完成下拉框的數據同步。
2.一般處理程序:從數據庫返回的數據是List<string>類型,我們需要自己定義一個toJson()方法將list轉化為json數據,然后返回json數據。
public string toJson(List<string> str) { StringBuilder json = new StringBuilder(); if (str == null) { return "null"; } json.Append("["); foreach (var item in str) { json.Append("{\"Name\":\""); json.Append(item); json.Append("\"},"); } return json.ToString().Substring(0, json.ToString().LastIndexOf(",")) + "]"; } /*得到并關聯倉庫(select標簽)*/ public void ProcessRequest(HttpContext context) { SubinventoryDC subinventorydc = new SubinventoryDC(); List<string> list = new List<string>(); list = subinventorydc.getAllSubinventory(); string json = toJson(list); context.Response.ContentType = "text/plain"; context.Response.Write(json); }
3.前臺頁面:前臺只需要定義一個id為issued_sub_key_c的select標簽。注意select標簽須得有一個name,后臺正是通過name來取得選中數據的值。取值方法:Request.Form["issued_sub_key_c"]。
<select id="issued_sub_key_c" name="issued_sub_key_c"> </select>
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。