ホームページ >ウェブフロントエンド >jsチュートリアル >Ajax -- フォームマッピング
この記事の例では、Python マッピング リストについて説明します。皆さんの参考に共有してください。具体的な分析は次のとおりです。
1 フォームのシリアル化をバックグラウンド エンティティ オブジェクトにマッピングする際に、多くの回り道が行われました。これを要約すると次のようになります。
フォーム:
<form id="form01" enctype="multipart/form-data"> <input type="text" name="name" id="name"/> <input type="text" name="password" id="password"/> <input type="button" value="确认" onclick="upload()"> </form>
JS メソッド:
function upload() { $.ajax({ type:"POST", url : '<%=basePath%>upload01.do', //用于文件上传的服务器端请求地址 data : formToJson($("#form01")), contentType: 'application/json; charset=utf-8', success : function(data, status) //服务器成功响应处理函数 { alert(data); }, error : function(data, status, e)//服务器响应失败处理函数 { alert(e); } }); } //将表单数据转化为JSON数据 form为表单对象,如$("#form01"),返回序列化数据 function formToJson(form) { var data = form.serialize(); data = decodeURIComponent(data, true);//防止中文乱码 data = data.replace(/&/g, "','"); data = data.replace(/=/g, "':'"); data = "({'" + data + "'})"; obj = eval(data); obj=JSON.stringify(obj); return obj; }
フォームをシリアル化するために、serialize() を直接使用しないのはなぜでしょうか。まだこの悩みはあります。それを実行すると、$("#form").serialize() は name=1&password=1 の形式を返しました。jquery がこのようにシリアル化する方法がわかりません。長い間オンラインで検索しましたが、役に立ちませんでした。 http://www.cnblogs.com/suruozhong/p/6256457.html というブログを見て、この奇妙なシリアル化結果を文字を変更して JSON 形式に変換すると、OK、ブロガーさん、ありがとう。
バックエンド コントローラー:
@RequestMapping(value = "upload01", method = RequestMethod.POST) public void uploadText01( HttpServletRequest request, HttpServletResponse response, @RequestBody User user) { System.out.println("run in"); }
フロントエンドの JSON データがオブジェクトにマッピングされるように、オブジェクトの前に @RequestBody が追加されていることに注意してください。そうしないと、一連のエラーが発生します。レポート:
Unsupported Media TypeContent type 'application/json;charset=UTF-8' not supported
ただし、エンティティ名がタグ内の name 属性値と一致しないため、このエラーが発生する可能性があります。
フォームを背景エンティティにマッピングできない理由は、シェルフ パッケージがないことが原因である可能性があります。
<!-- JSON支持 --> <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <!--指定jdk版本 --> <classifier>jdk15</classifier> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> </dependency>
2 メソッドでフォームを直接送信してください。
<form id="form01" enctype="multipart/form-data"> <input type="text" name="name" id="name" /> <input type="password" name="password" id="password" /> <input type="button" onclick="doConfirmForm()" value="确认"> </form>
function doConfirmForm(){ var form01=$("#form01"); form01.submit(); }
3 フォーム フォーム。 FormData に変換され、JSON が送信されます
<body> <form id="form"> name:<br> <input type="text" name="name"> <br> password:<br> <input type="text" name="password"> </form> </body><script type="text/javascript" src="./jquery-1.10.2.js"></script><script type="text/javascript"> var formData = new FormData($("#form")[0]); formData.append("createDate",new Date()); $.ajax({ type: "POST", data: convertFormDataToJson(formData), url: "http://localhost:80/test/requestBody", contentType: 'application/json; charset=utf-8', dataType: "json", success: function(result) { console.log(result); } }); function convertFormDataToJson(formData) { var objData = {}; for (var entry of formData.entries()){ objData[entry[0]] = entry[1]; } return JSON.stringify(objData); } </script>
関連する推奨事項:
#JSP フォーム送信送信マッピング サーブレット問題_html/css_WEB-ITnose
#Python マッピング リストの分析例以上がAjax -- フォームマッピングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。