背景
これは私の質問の続きです 同期/非同期関数のシーケンスを設定する正しい方法はすべて、フォームの送信とその後の処理を停止できますか?
正しい方法 (遅延パイプ) についての回答を得ましたが、実際にこれを実装することはまだできません。今日、jquery deferred API について読み始めたばかりですが、まだあまり理解できませんでした。jQuery API のドキュメントは、例がほとんどなく複雑すぎるようです。誰かがこれに関するいくつかの基本的なデモ/チュートリアルへのリンクを貼ることができますか? ここでキックスタートが必要です。
詳細
このプロジェクトでは jquery バージョン 1.6 を使用しています。
次の例を考えてみましょう - ユーザーがフォーム送信ボタンをクリックしたとき -
1. validateInventory() を実行します。
を。検証が失敗した場合、ユーザーが同意する場合は、ユーザーに確認ダイアログを表示します (ステップ 2 に進みます)
または
b. 検証に合格した場合 (ステップ 2 に進みます)
2. preValidateUrls() を実行します。
を。検証が失敗した場合、ユーザーが同意する場合は、ユーザーに確認ダイアログを表示します (ステップ 3 に進みます)
または
b. 検証に合格した場合 (手順 3 に進みます)
3. フォームを送信します。
以下は、私が持っている非同期関数の構造です-
この関数には if(confirm) ブロックも含まれていることに注意してください。私の質問 2 を読んでください。
function validateInventory()
{
$.ajax({
type: "POST",
url: posturl+"?"+params,
dataType: "json",
success: function(res)
{
if(!res.success)
{
//display some confirmation dialog, if user agrees con
if(confirm(msg))
{
//continue with next validation step
}
}
else
{
//validation success - so continue with next validation step
}
}
});
}
//similar logic as inside validateInventory()
function preValidateUrls()
{
}
また、シーケンスの任意の場所で、検証ロジックに同期検証関数 (クライアント側のみのロジック) を含めることもできます。
function syncVal()
{
return true/false
}
質問 1そのような関数を配置するための構文も、非同期関数と同様にする必要がありますか?
質問 2 (検証が失敗した場合) 確認ダイアログの表示を処理し、ユーザーが確認した場合にのみ次の検証ステップに進むにはどうすればよいですか。機能の再構築が必要ですか?ブロックを外側に移動するif(confirm)
必要がありますか?
今までたどり着いたところ
.when
大したことはありませんが、.done
APIを使用する必要があると思います。