問題タブ [jquery-mobile-ajax]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
jquery - jQuery モバイル マルチページ ページを切り替える前に ajax がデータを返すのを待つ
複数ページのフォームで jQuery モバイルを使用しています。ユーザーが [次のページ] というラベルの付いたボタンをクリックすると、AJAX 要求を実行したいと考えています。AJAX リクエストの結果によっては、ユーザーが次のページにアクセスできないようにしたいと考えています。
私が直面している問題は、AJAX リクエストが次のページ イベントよりも応答に時間がかかることだと思います。したがって、AJAX リクエストを終了させずに、ユーザーが次のページに入ることができます。
少なくとも私はそれが起こっていると思います。この問題の解決策を知っているか、前にこれに遭遇した人はいますか?
HTML:
jQuery:
上記のコード サンプルでは、[次のページ] ボタン (つまり#btnPage2
) をクリックすると、コンソール ログを確認すると "ユーザーはページ 2 で許可されていません" と表示されますが、ページ 2 にアクセスできます。
アップデート:
コードを次のように調整してみました。ユーザーがページ2へのアクセスを許可されていない場合にのみ機能します。 e.preventDefault
ajaxを終了させていますが、page2への変更を強制する方法がわかりません。ユーザーが page2 へのアクセスを許可されている場合、行
$(":mobile-pagecontainer").pagecontainer("change", "#page2");
問題を引き起こしているようです... pageChange イベントを呼び出す無限ループを作成するだけです。それがpage2へのページ変更を強制する方法だと思いましたが、私は間違っていると思います.page2への変更を強制する方法がわかりません
更新 #2
@deblocker 修正を実装しようとしましたが、まだ同じ問題が発生しています。canNotPass
ajax がコードに設定されている状況で次のコードを実行するとtrue
、 の値をテストするポイントに到達しないようですcanNotPass
。したがって、設定されることはなくe.preventDefault
、ユーザーは page2 へのアクセスを許可されます。
解決策は、ページ変更が発生する前に ajax が終了する時間を許可する遅延オブジェクトを設定することと関係があると思います。唯一の問題は、遅延オブジェクトを設定/操作する方法を知っていることです。