質問: new FormData($('#test').get(0)); ~~~ 変数:orientationを含めた処理 ~~~ $.ajax({ url: type: 'post' data: fd ~~~ その後の処理 ~~~ });
回答: 非同期処理、コールバックの考え方が間違っています。 まずは非同期処理というものを知る必要があります。 EXIF.getDataが、コンピュータに何を指示しているかざっくり説明致しますと、 「画像情報の読み込みが完了したら、あとでコールバック関数を実行してね」というもので、 関数としてはすぐに終了し、次のステップconsole.log行へ進みます。 orientationの初期化は後で実行することになっているので、 console.logでorientationを出力しようとしても、 まだ初期化されておらず、そこで初めての登場→エラーとなります。 ※追記 data URIでの画像は同期処理で書かれているっぽいので希望の動作になる可能性があります。未確認です>< ※更に追記 そもそもfunctionブロック内でvarしてるのでグローバルに代入は無理でした。失礼しました。 解決策は関数の中に処理を書いていってください。 コールバック関数の中から次の処理の関数をコールし、どんどん関数で処理を繋げていきます。 すると立派なコールバック地獄と呼ばれるコードが出来上がるはずです。 そんなコールバック地獄にヤバさを感じたらOKです! 「js コールバック」でググると非同期処理を同期処理っぽく書こう!といった記事が沢山でてきますので、どれも参考になると思います。まずは非同期処理と同期処理について知ってください。 なぜjsが非同期処理でやらないといけないのか、というのも知れると思います。 頑張ってください。