$(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で質問しましょう!
似たような質問が見つかりました
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- JavaScript プラグイン無しでContactform7にdatepickerを実装 3 2022/10/25 02:18
- Visual Basic(VBA) vbaのループ処理について 6 2022/05/06 15:35
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
読み込んだQRコードをフォーム...
-
セレクトを全て選択されていな...
-
switch文のswitch(n)の部分を複...
-
セレクトボックスを2つ選択して...
-
jQueryで同じクラス名のものを...
-
①入力フォーム→②確認表示画面→③...
-
jQueryでシンセサイザーを作っ...
-
IndexedDB を使ってファイルア...
-
スマホ上で、左右スワイプで次...
-
GASに文字列として関数を入れる...
-
フォームが空欄の時にフォーム...
-
二次元配列の全要素の全要素を...
-
【GAS】WEBアプリでハイパーリ...
-
画像の表示位置
-
【Google Apps Script】「ライ...
-
変数宣言と初期値代入の場所に...
-
プログラミング 学習
-
HTMLでサブフレームから親のス...
-
ジャバスクリプトについて。
-
プログラムについて。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
jsonテキストデータの並び替え...
-
json形式データのデータ連携に...
-
以下のようなjsonファイルで、"...
-
jQuery.msgBoxでのthisの使用に...
-
gulpfile.jsとpackage.jsonの読...
-
http上でrequest されたxmlファ...
-
jQuery $.ajax JSON形式のPOST
-
Ajaxでデータベース更新
-
jQuery.getでレスポンスデータ...
-
VSCodeにて「終了タグ」の背景...
-
フォームからjQuery,jQuery.jso...
-
教えてください!html5.jpを使...
-
【JavaScript】confirmのボタン...
-
HTMLでDBからデータを表形式で...
-
DirectXとOpenGLはどちらが動作...
-
saved from url=(0013)abou
-
ASP.NET(VB)VBソースからJavas...
-
ローカル用HTMLファイルの安全...
-
非同期関数とノンブロッキング...
-
AJAX通信が終わるまで次の処理...
おすすめ情報