今回は、Ajax の ドロップダウン メニュー のカスケード操作について説明します。 Ajax ドロップダウン メニューの の注意点 について、実際のケースを見てみましょう。
開発中、国、都市、町などの選択など、メニューのカスケード操作に遭遇することがよくあります。国を選択すると、次のメニューにその国の都市がリストされます。都市を選択すると、次のメニューに対応する町がリストされます。
このメニューのカスケード動作を解決するには2つの方法があります:
①jsを使用して実装し、ページで使用されているカスケードデータをjsに入れて、ページが読み込まれたときにjsを通して表示する 多くの解決策があります最も直感的な方法は、それを 多次元配列 に入れることです。考え方は人それぞれなので、ここでは詳しく説明しません。
②ajaxを使用して非同期かつ動的にロードし、対応するselectに表示するこの方法は非常に便利なので、開発での使用をお勧めします。
開発中の小さな例を見てみましょう:
JSP 短いページ:
<p class="form-group"> <label class="col-sm-2 control-label">设备类别</label> <p class="col-sm-4"> <select class="basic-single" name="codeCategory" onchange="showCodeSubCate()" id="codeCategory" style="width: 100%"> </select> </p> <label class="col-sm-2 control-label">设备子类</label> <p class="col-sm-4"> <select class="basic-single" name="codeSubCategory" id="codeSubCate" disabled="disabled" style="width: 100%"> <option value="">--请选择--</option> </select> </p> </p>
このページには、デバイス分類とデバイス サブカテゴリという 2 つのオプションが含まれます。デバイス分類は、第 1 レベルのメニューとデバイス サブカテゴリです。セカンダリメニューでは、デバイスサブカテゴリの表示内容はデバイスの分類によって決まります。
Ajax コード スニペットを見てみましょう:function addCodeCategory(){ $.ajax({ url: "<%=request.getContextPath()%>/facilitydict/showCodeCategory", async: false, //请求是否异步,默认为异步,这也是ajax重要特性 type: "GET", //请求方式 success: function(result) { result = $.parseJSON(result); var data = result.data; var codeCates = data.split(","); str ='<option value="6801">--请选择--</option>'; for(x in codeCates){ str+='<option value="'+codeCates[x]+'">'+codeCates[x]+'</option>'; } $("#codeCategory").html(str); } }); } function showCodeSubCate(){ $("#codeSubCate").prop("disabled","");//将设备子类的select解除锁定 var target = $("#codeCategory option:selected").text(); $.ajax({ url: "<%=request.getContextPath()%>/facilitydict/showCodeSubCategory", data : {codeCategory:target}, async: false, //请求是否异步,默认为异步,这也是ajax重要特性 type: "GET", //请求方式 success: function(result) { result = $.parseJSON(result); var data = result.data; var codeCates = data.split(","); var str=""; for(x in codeCates){ str+='<option value="'+codeCates[x]+'">'+codeCates[x]+'</option>'; } $("#codeSubCate").html(str); } }); }
のコンテンツが変更されると、showCodeSubCate 関数がトリガーされてバックグラウンドでデータを取得するように要求され、要求されたデータがクラスに対応する選択内のデバイスサブに追加されます。バックグラウンド コードの実装は次のとおりです (コントローラー メソッドのみが掲載されています): @RequestMapping("/showCodeCategory")
@ResponseBody
public Result<String> searchCodeCategory() {
Result<String> rs = new Result<>();
List<String> codeCategorys = facilityDictService.searchCodeCategory();
String codeCate = StringUtil.collectionToCommaDelimitedString(codeCategorys);
rs.setData(codeCate);
return rs;
}
@RequestMapping("/showCodeSubCategory")
@ResponseBody
public Result<String> searchCodeSubCategory(HttpServletRequest request) {
String codeCategory = request.getParameter("codeCategory");
Result<String> rs = new Result<>();
List<String> codeSubCategorys = facilityDictService.searchCodeSubCategory(codeCategory);
String codeCate = StringUtil.collectionToCommaDelimitedString(codeSubCategorys);
rs.setData(codeCate);
return rs;
}
対話型の Ajax ツール クラス。バックグラウンドでのデータ送信
public class Result<T> implements Serializable { private static final long serialVersionUID = 3637122497350396679L; private boolean success; private T data; private String msg; public Result() { } public Result(boolean success) { this.success = success; } public boolean isSuccess() { return success; } public void setSuccess(boolean success) { this.success = success; } public T getData() { return data; } public void setData(T data) { this.data = data; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public Result(boolean success, String msg) { super(); this.success = success; this.msg = msg; } public Result(boolean success, T data) { super(); this.success = success; this.data = data; } }
このクラスは、フロントエンドとバックエンドの対話に非常に便利です:
以下は、フロントエンドとバックエンドの Ajax 対話です:
フロントエンド Ajax コード:
$.ajax({ url: "<%=request.getContextPath()%>/supp/deleteSupp", data : {supplierId:supplierId}, async: false, //请求是否异步,默认为异步,这也是ajax重要特性 type: "GET", //请求方式 success: function(data) { var rs = eval('('+data+')'); flag = rs.success; if(flag){ alert("删除成功!"); } } });
以下はバックエンド Java コードです:
@RequestMapping("/deleteSupp") @ResponseBody public Result<String> deleteSupplier(HttpServletRequest request){ Result<String> rs = new Result<>(); String supplierId = request.getParameter("supplierId"); supplierService.deleteSupplierById(supplierId); rs.setSuccess(true); return rs; }
この記事の事例を読んだ後は、このコードをマスターできたと思います。さらにエキサイティングな方法については、php 中国語 Web サイトの他の関連記事に注目してください。
推奨書籍:
Ajax+mysqで都道府県・市区町村の3段階連携リストを実現 JsonとXMLデータのAjax送信手順を詳しく解説(コード付き)以上がAjax ドロップダウン メニューのカスケード操作の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。