- ベストアンサー
テキストファイルの内容を変数に格納する方法
- jQueryを使用して外部のテキストファイルを読み込み、その中身の文字列を変数に格納する方法について説明します。
- ajaxのsuccess内での値の表示は正常に行われるが、ajaxの外ではうまく変数に格納できない問題が発生する。テキストファイルのパスや内容に問題はない。
- loadを使用する方法も検討したが、HTML上のタグにしか出力できないため、今回の目的には合わない。変数にテキストファイルの中身を渡す方法を探している。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
デフォルトでは ajax() は指定されたデータに基づきファイルを非同期に読み込みます。 この「非同期に」というところがミソで、これは要するに読み込み処理を現在の処理とは別の流れで行います。そのとき現在の処理は ajax() を行った箇所以降を即時に実行します。 現実世界にたとえるならあなたがやりたいのは、どこかに資料の郵送を要求してその資料が届かないうちにその資料を読みたいということです。どう考えても無理ですよね。 ですので、同期的に読み込むように指示する必要があります。 パラメータに async : false を追加すれば ajax() は同期的にファイルを読み込むことになります。 ただし、上記の修正を行った場合は、ファイルの読み込みが終わるまでブラウザの操作ができなくなります。
その他の回答 (1)
- tracer
- ベストアンサー率41% (255/621)
結論から書くと、successの箇所でalertすれば、正常にalertされます。 少し説明が難しいですが、プラグラムは必ずしも上から下に実行されるわけではありません。 別の方も言われていますが、ajaxは非同期で行われるためです。 平たく言うと、読み込み後に行われるべき処理はすべてsuccessの中に書きなさいということになります。 たとえば、外部に関数を置いて、successの中ではそれらの関数を呼び出すだけ。というような使い方が考えられます。 ただ、処理が長くなると、複雑になり(ネストが深くなる)がちなので、jQueryの場合は、$.deferredというものを用いて、コードを扱いやすくします。この場での説明は冗長的になってしまうので、ご興味があれば、「jquery deferred」で使い方を検索してみてください。
お礼
deferredというものも教えて頂き、ありがとうございます。 今回は単純な処理なので使うことはなさそうですが、複数の階層にまたがってしまいそうな処理を、並列に出来るってことですね。
お礼
とても早いご回答ありがとうございます。助かりました。 例えが非常にわかりやすかったです。