質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

4回答

2210閲覧

javascript でのウェイトについて

it_solution_lab

総合スコア71

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2015/03/24 05:39

javascript で
ajax でDBからある値を取得し(処理A)、
その値を元に、
次に処理(処理B)を行おうとしているが、
記述順は、処理A、処理Bの順に書いてあるが、

処理Bが先に、
値が代入されないまま呼び出されてしまいます。

処理Aの中に alert を入れて確認すると
値は取れていますが、

画面に表示される順番が
処理Bのalert のあと 処理Aの中のakert が表示されてしまいます。

var get_id;

functuin getid() {
get_id="123";
alert('function getid='=get_id);
}

//相手のIDを取得する
getid();
alert('id='+get_id);
処理B
とすると
まず
id=
が表示され
その後

function getid=123

が表示されてしまいます

確実に代入されたget_id を処理Bで使いたいのですが
良い方法はありますか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

AJAXは非同期処理なので、AJAX呼び出し後の処理はコールバックとして書きます。
onSuccessの際に処理Bを行なうようにするわけです。

投稿2015/03/24 05:42

chokojori

総合スコア971

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

it_solution_lab

2015/03/24 06:24

ご指摘のとおり、 ajax の呼び出された関数の内部でsuccess に さらに関数呼び出しを記述し 別途処理Bだけを切り出した関数を作成して、うまく行きました ありがとうございました。
guest

0

すみません、間違えて投稿したのでここでレス書きます。
getidで実際はajaxをしているということでしたら
他のお二人の回答のようにコールバック関数で対応するのがいいと思います。

lang

1function getid(callback) { 2 // ~~ajax処理省略~~ 3 // ajax完了後に処理呼び出し 4 if(typeof callback == "function") 5 { 6 // 第一引数に取得したidを渡す 7 callback(get_id); 8 } 9} 10 11// コールバック関数定義 12function alert_id(id) 13{ 14 alert('id=' + id); 15} 16 17// getidの第一引数にコールバック関数を渡す(実際はここで実行される) 18getid(alert_id);

投稿2015/03/24 06:11

編集2015/03/24 06:14
PruneMazui

総合スコア227

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まず実行したコードは以下の通りですか?(幾つかシンタックスエラーを修正)

lang

1var get_id; 2function getid() { 3 get_id = '123'; 4 alert('function getid=' + get_id); 5} 6getid(); 7alert('id=' + get_id);

そんな馬鹿なと思いコンソールで試しましたが出力結果は以下の通りでした。

function getid=123
id=123

このコードではなく、getid()がajaxでなんらかの処理をした結果ということでしたら話が変わってきます。

投稿2015/03/24 05:48

PruneMazui

総合スコア227

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

it_solution_lab

2015/03/24 05:59

function getid() { get_id = '123'; alert('function getid=' + get_id); } は 実際は ajax の関数です 別ファイルにあるので、関数の例として書きましたが紛らわしかったですね 非同期なので、先に alert id= が表示されます
guest

0

どのような方法でajaxを実現しているか分かりませんが、基本的に以下のようなロジックを採用するのが一般的だと思います。

1.ajax通信を同期的に行う
2.ajax通信を非同期で行い、通信終了時のコールバック関数内で取得した値を処理する

よほど通信時間が短い事が保証されていない限り、2.が推奨されます。
コールバック関数の指定は、XMLHttpRequestオブジェクトでしたらonreadystatechangeプロパティになります。
jQueryでしたら、$.ajax関数のsuccessオプションになります。

投稿2015/03/24 05:48

terushu

総合スコア358

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

it_solution_lab

2015/03/24 06:24

ご指摘のとおり、 ajax の呼び出された関数の内部でsuccess に さらに関数呼び出しを記述し 別途処理Bだけを切り出した関数を作成して、うまく行きました ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問