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

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

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

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

Q&A

解決済

2回答

364閲覧

Ajaxの返り値が取得できているのに未定義

Chandler_Bing

総合スコア673

Ajax

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

1グッド

0クリップ

投稿2019/02/21 09:11

JS

1$(function(){ 2var likes = null; 3 4$('#like').on('click', function() { 5 getLikes(hotelid).done(function(res) { 6 likes = res.likes; 7 console.log(res); 8 console.log(likes);//NULL 9 if (!$(this).hasClass('liked')) { 10   //今は何もしない 11 12 } 13 }); 14 }); 15});

これを実行するとconsole.log(res)には

[{likes: "234"}] (1)

という値が返ってきますが、console.log(likesを出力するとNULLになります。
どう対処すれば良いですか。

bochan2👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

[{likes: "234"}]なので配列の中にオブジェクトがある状態です。
よって
取得方法はres[0].likesでは

投稿2019/02/21 09:12

rururu3

総合スコア5545

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

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

Chandler_Bing

2019/02/21 09:17

ありがとうございました。それで上手く行きました。 今までは同じ形(res.likes)で取れていました。 なぜこのような形になったのでしょうか。変えたところは取得先のDBの情報を全カラム取得から、 特定のカラムのみ取得すように変えたくらいです。
rururu3

2019/02/21 09:19

それに関してはサーバー側のプログラム見ないとわからないので、なんとも言えないですが、JavaScriptでいうオブジェクト返してたのが配列を返すようになったのではと思います。
rururu3

2019/02/21 09:20

あと、配列になってるので、配列数などチェックするなり、全配列文処理するならforEachなど使うようにしてくださいね
guest

0

オブジェクトのメンバだけを参照しても未定義のlikesという変数扱いにしかなりません。
オブジェクト名をつけてconsole.log(res[i].likes)としてください。

iはインデックス番号なので、ひととおり取得したいならばforでループさせるといいです

js

1for(let i = 0 ; i < res.length ; i++){ 2 console.log(res[i].likes); //データの取得 3}

あるいは

js

1$.each(res,function(idx,row){ 2 console.log(row.likes); //データの取得 3}) 4

とする方法もあります。パフォーマンスを考慮するならforの方が速いですけどね。

投稿2019/02/21 09:13

編集2019/02/21 09:29
FKM

総合スコア3633

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

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

Chandler_Bing

2019/02/21 09:18

ありがとうございます。それだと未定義になります。
FKM

2019/02/21 09:30 編集

すみません、よく見たら配列の中にオブジェクトが入っていましたね、インデックス番号が必要でした。 それを記述しようとしたら、rururu3氏と同じ意見となりましたので、具体的な式を残しておきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問