「ボタンを押したらXMLから値をajaxで取ってきてフォームに入れて、その値を即座に10倍した値を別のフォームに入れたい」
という設定でコードを書く。
この画像の条件で「読め」を押すと、まず50の入っているフォームが2000に上書きされて、その下の10倍に20000が入るはず。
…。これで数日かかりました。なぜ読み込む前の値を読んでしまうのか。
「successコールバックに書く」という方法もなくはない。なくはないが
実際は「読み込んだ値をすぐ別のajaxで送信して」的なことが発生していた。
訳が分からなくなる…。
調べてみると、jQuery.Deffred と .then() という書き方があることに気づく。
ざっくりいうと、
「processedとかrejectedが返されるまで待機」
「$.ajaxはこっそりprocessedとかrejectedを返している」
「$ajax().then()のthen節にふたつfunctionを入れることができて、前半はprocessedのあと、後半はrejectedのあと実行される」
「.then()を直結連鎖させると上からprocessed側が実行されていく」…
とりあえず、.thenだ。と。
ajaxで値が変わるのを待ってから値をフォームから読んで書き直している。
これがやりたかったことだった。
まだまだ、使い方には研究が要りそうだ。
var deferred = new $.Deferred()
からの
return deferred.resolve().promise()
で
processedの結果を返したりとかもあった。
簡単なコードで連鎖に成功すると気持ちが良い。今はその感動だけ伝えたい…。