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

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

新規登録して質問してみよう
ただいま回答率
85.37%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

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

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

Q&A

解決済

1回答

812閲覧

javascript 変数の情報が消える?

Yuta4551

総合スコア14

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

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

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

0グッド

0クリップ

投稿2020/05/31 04:09

全体像

Rails5.2とgoogle map APIを使った地図表示アプリです。

情報の流れとしては、
①gonというgemを使って、Railsのコントローラーからjavascriptに情報を渡す
②javascriptでgoogle map APIを使って住所から緯度経度を取得
③住所と緯度経度を含んだデータをRailsコントローラーに渡す
という流れです。

google map APIのジオコーダーを使って、住所から緯度経度を取得しているところまではうまくいっています。

問題はそのデータをrailsコントローラーに渡す時に緯度経度の情報が消えてしまっているところです。
(ajaxで情報の受け渡し自体はできているので、javascriptの中で変数を受け渡ししている時に情報が消えてしまっているかと考えています)

検証内容

consoleで一つずつ情報を取り出してみました。

JavaScript

11 console.log(places) 22 console.log(places[0]) 33 console.log(places[0].latlng)
  1. console.log(places)

6行目:latlngプロパティは存在しています。

(3) [{…}, {…}, {…}] 0: address: "大阪府大阪市北区天神橋1丁目12−19" created_at: "2020-05-28T12:08:37.612Z" id: 1 latlng: {lat: 34.6945953, lng: 135.5116653} name: "トキオナ" object: {eleven: 11, two: 22} updated_at: "2020-05-30T13:34:38.525Z" __proto__: Object 1: {id: 2, name: "らーめん楓人", address: "大阪府大阪市北区南森町1丁目2−2", latlng: {…}, created_at: "2020-05-28T12:09:54.159Z", …} 2: {id: 3, name: "&ISLAND", address: "2丁目-1-23 北浜 中央区 大阪市 大阪府", latlng: {…}, created_at: "2020-05-28T12:15:14.545Z", …} length: 3 __proto__: Array(0) ``` 2. console.log(places[0]) 1行目:latlngプロパティはnullになっていると思いきや、 展開するとlatlngはlatとlngが表示されます

{id: 1, name: "トキオナ", address: "大阪府大阪市北区天神橋1丁目12−19", latlng: null, created_at: "2020-05-28T12:08:37.612Z", …}
//以下展開した時の情報
address: "大阪府大阪市北区天神橋1丁目12−19"
created_at: "2020-05-28T12:08:37.612Z"
id: 1
latlng:
lat: 34.6945953
lng: 135.5116653
proto: Object
name: "トキオナ"
object: {eleven: 11, two: 22}
updated_at: "2020-05-30T13:34:38.525Z"
proto: Object

3.console.log(places[0].latlng) nullとしか返されません

null

この状態なので、placesをrailsコントローラーに渡した時、latlngの情報は空っぽの状態です。
$.ajax({ url: "/maps/setLatlng", type: "POST", data: { content: places }, datatype: "html", success: function (data) { console.log("成功") }, error: function (data) { console.log("失敗") } });
※受け渡しは成功するものの、latlngの情報は空の状態

{"content"=>{"0"=>{"id"=>"1", "name"=>"トキオナ", "address"=>"大阪府大阪市北区天神橋1丁目12−19", "latlng"=>"", "created_at"=>"2020-05-28T12:08:37.612Z", "updated_at"=>"2020-05-30T13:34:38.525Z"},

どこにトラブルが潜んでいるかや、検証方法教えていただけますでしょうか。 よろしくお願いします。

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

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

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

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

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

guest

回答1

0

自己解決

非同期通信のため、上から順々に実行されていないことが原因でした。
(検証の仕方はサークルの人に教えてもらいました)

javascriptの中にdebuggerを仕込んで、プログラムの実行順や変数の中身を一つずつ確認しました。

考えていた流れになっていなかったので、promiseを使って処理順を整理しました。

投稿2020/06/01 06:10

Yuta4551

総合スコア14

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問