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

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

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

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

Q&A

解決済

3回答

1457閲覧

global変数の配列がstringになる

namuyan

総合スコア76

JavaScript

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

0グッド

0クリップ

投稿2016/10/24 04:09

JavaScript

1 2function Nagezeni(state,resid,coin,amount){ 3 //まずはリセット 4 var content = new Array(); 5 6 console.log('読み取りOK'); 7 content.push("<p>選択しましょう</p>"); 8 content.push("<p>以下から選んで下さい</p>"); 9 10 $.post('./API/get_amount.php',{'id': id,'pincode': pincode}, 11 function(data){ 12 //リクエストが成功した際に実行する関数 13 console.log("リクエストが成功!"); 14 var callback = $.extend(true,{},data.amount); 15 var allamount = callback; 16 17 console.log(content); //なぜかstring扱い 18 content.push("<p>"); 19 if(allamount.length > 0){ 20 $.each(allamount,function(index,val){ 21 console.log("いんすう:" + index + ":" + val); 22 content.push("テスト"); 23 }); 24 }else{console.log("amountに配列が入っていない");} 25 content.push("</p>"); 26 27 },"json"); 28 29 console.log('state start_modal OK'); 30 31 // 反映させる 32 content = content.join(""); 33 $("#nagezeni_content").append(content); 34 console.log('文字入れ替え OK'); 35}

content.push("<p>");にてエラーが発生します。consoleを見ると$.postのコールバック関数内のcontentの扱いが何故かstringになっており挿入できない状態になっています。
これはどういうことでしょうか?

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

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

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

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

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

guest

回答3

0

ベストアンサー

コールバックは非同期的に実行されますので、コードの実行は先に$.post以下へと流れていきます。そして、content = content.join("");が実行されるので、この時点で文字列となってしまいます。

反映処理もコールバックの中に書く、というのがいちばん手っ取り早いと思います。

投稿2016/10/24 04:21

maisumakun

総合スコア145123

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

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

namuyan

2016/10/24 05:49

なるほど JSの非同期動作について理解が深まるように感じました。 変にコードを短くしようとせずにコールバック内に記述します。
guest

0

javascript

1content = content.join("")

↑ここで文字列型になってます。

join() メソッドは、配列のすべての要素を繋いで文字列にします

Array.prototype.join() - JavaScript | MDN

投稿2016/10/24 04:23

Lhankor_Mhy

総合スコア35871

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

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

0

$.ajaxを利用して、asyncで同期処理にするのでもよいでしょう

投稿2016/10/24 04:55

yambejp

総合スコア114585

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問