
$(function() {
$item = "";
$.ajax({
url: 'data/data.txt',
success: function($data) {
$item = $data;
}
});
alert($item);
});
上記のように外部のテキストファイルを読み込んで、その中身の文字列をajaxの外で宣言している変数に格納したいのですが、何も格納できていません。
テキストファイルのパスが間違っているということや、中身が何もないということはありません。
ajaxのsuccess内にalertを置いた場合は値が正しく表示されるのですが、ajaxの外ではやっぱだめです。
ajaxではなくloadでやろうとも思ったのですが、loadの場合はHTML上のタグにしか出力できないので、今回の目的には合いません。
なんとかして、変数にテキストファイルの中身を渡せないのでしょうか。
No.1ベストアンサー
- 回答日時:
デフォルトでは ajax() は指定されたデータに基づきファイルを非同期に読み込みます。
この「非同期に」というところがミソで、これは要するに読み込み処理を現在の処理とは別の流れで行います。そのとき現在の処理は ajax() を行った箇所以降を即時に実行します。
現実世界にたとえるならあなたがやりたいのは、どこかに資料の郵送を要求してその資料が届かないうちにその資料を読みたいということです。どう考えても無理ですよね。
ですので、同期的に読み込むように指示する必要があります。
パラメータに
async : false
を追加すれば ajax() は同期的にファイルを読み込むことになります。
ただし、上記の修正を行った場合は、ファイルの読み込みが終わるまでブラウザの操作ができなくなります。
No.2
- 回答日時:
結論から書くと、successの箇所でalertすれば、正常にalertされます。
少し説明が難しいですが、プラグラムは必ずしも上から下に実行されるわけではありません。
別の方も言われていますが、ajaxは非同期で行われるためです。
平たく言うと、読み込み後に行われるべき処理はすべてsuccessの中に書きなさいということになります。
たとえば、外部に関数を置いて、successの中ではそれらの関数を呼び出すだけ。というような使い方が考えられます。
ただ、処理が長くなると、複雑になり(ネストが深くなる)がちなので、jQueryの場合は、$.deferredというものを用いて、コードを扱いやすくします。この場での説明は冗長的になってしまうので、ご興味があれば、「jquery deferred」で使い方を検索してみてください。
deferredというものも教えて頂き、ありがとうございます。
今回は単純な処理なので使うことはなさそうですが、複数の階層にまたがってしまいそうな処理を、並列に出来るってことですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
jsonテキストデータの並び替え...
-
jsで質問です。 formをsubmitし...
-
スマホ上で、左右スワイプで次...
-
Outlookのアカウントがあるとメ...
-
オブジェクト配列の各メンバを...
-
初心者です。gulpでコンパイル...
-
タグを教えてください。
-
ラジオボタンを複数選択したと...
-
2025年相性がいい人のサイトの...
-
CookieをWebStoeageに変える
-
Adobe acrobat proでフォームを...
-
jqueryのselect2で検索欄の文字...
-
<tr>指定した表の行要素をボ...
-
食材の期限を管理するためにGAS...
-
ビデオのJSについて
-
鍵盤アプリで、スマホの画面に...
-
<div>のタッチ状態を維持したま...
-
jQueryでシンセサイザーを作っ...
-
プログラミング 学習
-
HTMLでサブフレームから親のス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
jsonテキストデータの並び替え...
-
http上でrequest されたxmlファ...
-
json形式データのデータ連携に...
-
テキストファイルの内容を変数...
-
ジャンクの箇所を一切書かずに...
-
【JavaScript】confirmのボタン...
-
saved from url=(0013)abou
-
HTMLでDBからデータを表形式で...
-
データ受け渡しについて
-
DirectXとOpenGLはどちらが動作...
-
ASP.NET(VB)VBソースからJavas...
-
ASP.NET 動的に行を増やすTable
-
jQueryのAjaxで通信の途中結果...
-
ajaxでhtmlを返して画面に描画…...
-
ローカル用HTMLファイルの安全...
-
webシステムでchrome
-
HTMLでリアルタイムグラフを作...
-
読み取り専用が外れない
-
JSTLを利用してJavascriptの結...
-
身のこなしの意味は動作ですか?
おすすめ情報