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

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

新規登録して質問してみよう
ただいま回答率
85.47%
データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

JavaScript

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

3回答

1894閲覧

Ajaxで受け取ったデータを、Handsontableで表示させたい。

jiritspenguin

総合スコア5

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

JavaScript

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2020/02/06 08:13

編集2020/02/06 08:37

mySQLのテーブルのデータを、PHP(test.php)を間に挟んで、
Ajaxで受け取ろうとしています。
受け取ったデータがコンソールに表示されているので、
データーは受け取れているようなのですが、
うまく、変数dataに入っていないのか、
Handsontableに表示されません。

いろいろ調べてみましたが、わかりませんでした。
お願いします、教えてください。

JavaScript

1<script> 2$(document).ready(function () { 3 4 var data; 5 6 $.ajax({ 7 // 通信先ファイル名 8 url: "test.php", 9 // 通信が成功した時 10 success: function(data) { 11 // 取得したレコードをeachで順次取り出す 12 $.each(data, function(key, value){ 13 // #all_show_result内にappendで追記していく 14 $('#all_show_result').append("<tr><td>" + value.id + "</td><td>" + value.name + "</td><td>" + value.price + "</td></tr>"); 15 }); 16 17 console.log("通信成功"); 18 console.log(data); 19 }, 20 21 // 通信が失敗した時 22 error: function(){ 23 console.log("通信失敗"); 24 console.log(data); 25 } 26 }); 27 28 container = document.getElementById('example'), //後ほど表を展開する要素を指定 29 hot; 30 //以下はデータ指定と表示オプション 31 hot = new Handsontable(container, { 32 data: data, //さっき作ったdataを指定 33 minSpareRows: 1, //表の一番下にいくつ空行を表示するか 34 colHeaders: true, //カラムの名前を表示するかどうか 35 contextMenu: true //セルを右クリックしたときのメニューをすべて表示 36 }); 37 38 39 function bindDumpButton() { //以下は基本的にいじりません 40 41 Handsontable.Dom.addEvent(document.body, 'click', function (e) { 42 43 var element = e.target || e.srcElement; 44 45 if (element.nodeName == "BUTTON" && element.name == 'dump') { 46 var name = element.getAttribute('data-dump'); 47 var instance = element.getAttribute('data-instance'); 48 var hot = window[instance]; 49 console.log('data of ' + name, hot.getData()); 50 } 51 }); 52 } 53 bindDumpButton(); //関数実行 54 55}); 56</script>

イメージ説明

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

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

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

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

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

miyabi_takatsuk

2020/02/06 08:30

> 受け取ったデータがコンソールに漏れます。 どういうことですか? コンソールに表示されるのが嫌ということですか??
jiritspenguin

2020/02/06 08:36

はい。すいません、よくわかっておらず、質問が明後日の方向に いっているようでした、もうしわけありません。 コンソールに表示できているので、データは受取れている ようなのですが、Handsontableに表示されないのです。 変数dataに、データが入っていないから表示されないのだと 思い、質問を立てました。
miyabi_takatsuk

2020/02/06 08:39 編集

ああ、よく状況わかりました。 回答しますね。 あと、第三者にもパッとわかるよう、インデントは揃えといたほうがいいかと。
jiritspenguin

2020/02/06 08:43

回答、ありがとうございます。 インデントについても、努力します。ほんとうに、すいません。 こういう専門的人の使うサイトで質問させていただくレベルに達して いないことは、重々承知しております。ほんとうに、すいません。
guest

回答3

0

とりあえず$.ajaxのsuccessは古い書き方なのでdone構文に変更してください
感じからすると$.ajaxをfetchに切り替えて、async/awaitで処理すると
良いように思います

投稿2020/02/07 03:17

yambejp

総合スコア114915

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

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

yambejp

2020/02/07 03:18 編集

どうしても$.ajaxで処理したいなら$.Deferredとか利用してください
guest

0

原因はただ一点です。
data変数に非同期でデータを取得しているためです。
つまり、data変数にデータが入る前に、それ以下のコードが実行されてしまっているからです。
Ajax処理の成功時に、dataを使った処理を行うようにしましょう。

下記でどうでしょうか?

javascript

1$(document).ready(function () { 2 3 // どうせ非同期取得なので、ここで宣言してもあまり意味ないので、削除 4 // var data; 5 6 // このスコープ全体で使えるよう変数宣言を頭にもってきた。 7 container = document.getElementById('example'), //後ほど表を展開する要素を指定 8 hot; 9 10 $.ajax({ 11 // 通信先ファイル名 12 url: "test.php", 13 // 通信が成功した時 14 success: function(data) { 15 // 取得したレコードをeachで順次取り出す 16 $.each(data, function(key, value){ 17 // #all_show_result内にappendで追記していく 18 $('#all_show_result').append("<tr><td>" + value.id + "</td><td>" + value.name + "</td><td>" + value.price + "</td></tr>"); 19 }); 20 21 console.log("通信成功"); 22 console.log(data); 23 24 // グローバル変数にしっかり代入 25 //以下はデータ指定と表示オプション 26 hot = new Handsontable(container, { 27 data: data, //さっき作ったdataを指定 28 minSpareRows: 1, //表の一番下にいくつ空行を表示するか 29 colHeaders: true, //カラムの名前を表示するかどうか 30 contextMenu: true //セルを右クリックしたときのメニューをすべて表示 31 }); 32 33 // 関数実行を、ここにもってくる。(非同期通信が終わってるので、hotにdataが入った状態なので) 34 bindDumpButton(); //関数実行 35 }, 36 37 // 通信が失敗した時 38 error: function(){ 39 console.log("通信失敗"); 40 console.log(data); 41 } 42 }); 43 44 45 function bindDumpButton() { //以下は基本的にいじりません 46 Handsontable.Dom.addEvent(document.body, 'click', function (e) { 47 48 var element = e.target || e.srcElement; 49 50 if (element.nodeName == "BUTTON" && element.name == 'dump') { 51 var name = element.getAttribute('data-dump'); 52 var instance = element.getAttribute('data-instance'); 53 var hot = window[instance]; 54 console.log('data of ' + name, hot.getData()); 55 } 56 }); 57 } 58 59 60});

Ajaxを使うなら、非同期処理同期処理についてはよくよく勉強しましょう。

投稿2020/02/06 08:54

編集2020/02/06 08:58
miyabi_takatsuk

総合スコア9528

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

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

0

自己解決

そもそも、ソースが、
他から、コピペで拾ってきたものをつぎはぎしたものだったので、
意図した動作になるように組まれていませんでした。

お騒がせしました、ありがとうございました。

投稿2020/03/17 07:38

jiritspenguin

総合スコア5

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問