$(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ランキング
-
HTMLでサブフレームから親のス...
-
二次元配列を使って順位をだす...
-
ボタンを押したあとに画像を表...
-
GASでGoogleフォームの自動返信...
-
jQueryで同じクラス名のものを...
-
ジャバスクリプトについて。
-
React hooksが値を返して配列変...
-
フロントエンドフレームワーク...
-
【Google Apps Script】「ライ...
-
プログラムについて。
-
Q&A掲示板の入力フォームに文字...
-
メールフォームの日付入力フォ...
-
iOSのみダブルタップが必要
-
jsで質問です。 displayプロパ...
-
var exports = exports || {}; ...
-
HTMLタグに複数のクラスを設定...
-
Googleフォームで選択肢に応じ...
-
変数名をどのようにつけるのが...
-
disabled プロパティが表示され...
-
二次元配列の中の各行の要素を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
http上でrequest されたxmlファ...
-
テキストファイルの内容を変数...
-
json形式データのデータ連携に...
-
jsonテキストデータの並び替え...
-
【JavaScript】confirmのボタン...
-
DirectXとOpenGLはどちらが動作...
-
非同期通信を使うタイミングが...
-
HTMLでDBからデータを表形式で...
-
リンクを押すとEXEファイルを実...
-
saved from url=(0013)abou
-
ASP.NET(VB)VBソースからJavas...
-
Javadcriptでwebサーバー側にあ...
-
カーソルの動きに合わせてDBか...
-
Ajaxでpostした内容のresponse...
-
jQueryのAjaxで通信の途中結果...
-
[JavaScript] preven...
-
php ob_flushが全く動作しない
-
webシステムでchrome
-
sleepの負荷
-
JQuery サーバー上にアップする...
おすすめ情報