最近、jsp の学生情報管理システムを開発しています。jsp に出会ったばかりで、多くの問題に遭遇したので、記録して共有します。
サーブレットへの Ajax 送信フォームの JQuery の例
フロントエンド部分コード:
<form class="addSud" method="post" action=""> <table> <tr> <td class="textRight">姓名</td> <td colspan="2"><input type="text" id="name" name="name"></td> <td class="textRight">学号</td> <td colspan="2"><input type="text" id="studentId" name="studentId"></td> </tr> <tr> <td colspan="5"> <input type="submit" id="addStudents" value="提交"></td> </tr> </table> </form>
ajax 送信フォーム コード:
//增加学生,异步提交学生表单 $("#addStudents").click(function() { $.ajax({ url: "addStudents.do",//要请求的服务器url //这是一个对象,表示请求的参数,两个参数:method=ajax&val=xxx,服务器可以通过request.getParameter()来获取 //data:{method:"ajaxTest",val:value}, data: { name: $("#name").val(), studentId: $("#studentId").val(), }, async: true, //是否为异步请求 cache: false, //是否缓存结果 type: "POST", //请求方式为POST dataType: "json", //服务器返回的数据是什么类型 success: function(result){ //这个方法会在服务器执行成功是被调用 ,参数result就是服务器返回的值(现在是json类型) if(result){ alert("true"); }else{ alert("false"); } } }); });
web.xml 設定コード:
<servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>addStudents</servlet-name> <servlet-class>org.cms.students.addStudents</servlet-class> </servlet> <servlet-mapping> <servlet-name>addStudents</servlet-name> <url-pattern>/addStudents.do</url-pattern> </servlet-mapping>
addStudents.java コード (POST 送信メソッドを使用):
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); String name=request.getParameter("name"); System.out.println(name); System.out.println("123456789"); out.print("false"); }
ajax フォームを送信
上記の設定を通過した後、学生の名前を入力してフォームを送信しましたが、名前と文字列「123456789」が myeclipse コンソールに出力されず、その後、狂ったチェックを開始して n 回チェックしました, どこでエラーが発生したかはまだわかりませんが、偶然、問題を発見しました。 ajaxコードブロックの後にalert()ステートメントを追加すると、ブラウザに対応するコンテンツがポップアップ表示され、myeclipseのコンソールに名前と文字列が表示され、非常に混乱しました。たくさんのブログ 公式ドキュメントを読んだ後、すべてが JQuery ajax の同期および非同期送信の理由であることがわかりました。
まずは JQuery の ajax メソッドを理解しましょう:
非同期の理解: コードが ajax 部分まで実行されるとき、この時点で return を使用する必要がある外部コードがある場合、それは ajax の後の外部コードと一緒に実行されます。 ajax の値、および ajax の async 属性が true (つまり、この時点で ajax が非同期である) の場合、後続の外部コードは ajax の戻り値を取得することはできません。つまり、同期にのみ設定できます。 , ajaxのasync属性がtrueの場合、ajax部分が実行され、その後のコードが実行されると関係に連続性が生じて戻り値が得られます。
その後、asyncをfalseに設定し、問題は本当に解決しましたが、アラートステートメントを追加した後、非同期であっても名前と文字列が出力されるのはなぜですか?
引き続き情報を確認してください。私自身の要約は次のとおりです (専門家のアドバイスを歓迎します):
1. When async: true: 送信ボタンがクリックされると、クリック イベントのコード ステートメントが実行されます。 ajax は非同期実行により実行されます。したがって、後続のステートメントがないため、後続のステートメントの実行はブロックされません。クリック イベントを完了する前に ajax が終了した可能性があるため、名前と文字列は出力されませんでした。 ajax の後にアラート ステートメントを追加すると、クリック イベントはここでブロックされます。この時点で、ajax には実行するための十分な時間があり、コンソールは名前と文字列を出力できます。外側のクリックイベントを削除してajaxを直接実行してみたところ、同期・非同期問わず名前と文字列が出力でき、私の推測が証明できました。
2. async:false の場合: 送信ボタンがクリックされると、クリック イベント内のコード ステートメントも実行されます。ajax は同期的に実行されるため、実行を続行する前に ajax が正常に返されるまで待つ必要があります。当然、後続のコードは名前と文字列を出力できます。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。
