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

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

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

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

2回答

3023閲覧

【チャットアプリ/ローカルストレージ】自身の発言と他人の発言でアイコンを変えたいのですが、うまくできません。。

退会済みユーザー

退会済みユーザー

総合スコア0

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

1クリップ

投稿2015/06/10 03:17

![イメージ説明]WIDTH:458
プログラミング歴2ヶ月の初心者です。教えてください!

###前提・実現したいこと
複数人で同時使用できるチャットを作っています。
デザインは概ねLINEを模していますが、自身の発言にも相手の発言にもアイコンがつきます。
アイコンはtwitterから引っ張ってきています。

###発生している問題・エラーメッセージ
当然、自身の発言は自分のアイコン、他の人の発言はその人のアイコンが表示されるようにしたいのですが、何故か表示が全て自身のアイコンとなってしまいます。
他ユーザーも、入力したアカウントのアイコンはちゃんととれるのですが、全ての投稿が同じアイコンになってしまいます。
原因とともに解決策をお教え頂けると大変ありがたいです!

流れとしては、
1.入力欄にアカウントを入力しメッセージ送信ボタンを押すとアカウントをローカルストレージに保存
2.メッセージ表示の際、ローカルストレージから読みだしたその文字列を変数に入れる
3.twitterアイコン取得のurlに変数を流す
4.取得したアイコンをチャット欄に挿入

###ソースコード(一部省略)

lang

1//1.送信ボタンでアカウントを保存 2function sendText(text){ 3 localStorage.setItem( "name" , $("#username").val() ); 4} 5 6//2.アカウントを変数に代入 7var name; 8name = localStorage.getItem("name"); 9 10//3.twitterアイコン取得 11var icon = 'http://www.paper-glasses.com/api/twipi/' + name + '/original' ; 12 13//4.アイコンをチャット欄に挿入(自身の発言と他人の発言はローカルストレージのnameが同一かどうかで見分ける) 14function addText(text){ 15 if(text.name == localStorage.getItem("name")){ 16 $("#board").append('<li class="mylist">' + 17 '<span class="myname">' + '<img class="icon" src="'+icon+'">' + 18 '<span class="mydate"><span class="txt">' +text.input_date+ '</span></span></span>' + 19 '<span class="mymsg">' +text.message+ '</span></li>') 20 } else { 21 $("#board").append('<li class="yrlist">' + 22 '<span class="yrname">' + '<img class="icon" src="'+icon+'">' + 23 '<span class="yrdate"><span class="txt">' +text.input_date+ '</span></span></span>' + 24 '<span class="yrmsg">' +text.message+ '</span></li>') 25 } 26

他人が投稿する際はその他人のローカルストレージのnameを代入したurlから画像をとってくるのでそれぞれ表示されると思ったのですが、、
勉強中のひよっこです。教えてください!

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

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

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

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

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

guest

回答2

0

同一のアイコン画像を利用してませんか?

lang

1var icon = 'http://www.paper-glasses.com/api/twipi/' + name + '/original' ;

は書き換えていないように見えますが・・・

投稿2015/06/10 03:21

orange0190

総合スコア1698

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

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

退会済みユーザー

退会済みユーザー

2015/06/10 03:38

コメントありがとうございます。 var nameはローカルストレージから値をとってきています。 私が自身のPC(ブラウザ)で操作するときは私のローカルストレージに入った私のアカウント名が、 他の方がその方のPCで操作するときはその方が入力したアカウント名がnameに入るので、 var icon = 'http://www.paper-glasses.com/api/twipi/' + name + '/original' ; のnameの中身は勝手に変わっているはずだと思っています。 他人がsendしたらその方のアイコンが取得され、addのif文で他人の発言だと見分けてそのアイコンが自分の画面に挿入される。 どこをどうすれば良いのでしょうか。考え方だけでも結構ですので、お教え頂けると大変ありがたいです。
orange0190

2015/06/10 03:43

name = localStorage.getItem("name")で持ってきた値はただの文字列であり、いくらlocalStorageの中身が変わろうと、勝手に変化したりはしません。 ですので、addTextの中でiconを変える必要があります。 addTextの一番最初に icon = 'http://www.paper-glasses.com/api/twipi/' + localStorage.getItem("name") + '/original' ; としてあげるといいのではないでしょうか。
orange0190

2015/06/10 04:11

ああ、少々勘違いしてました。 chiku_さんの言うとおり、localStorageはそれぞれの端末のブラウザ毎に保存されるので、端末が別だと共有されません。 ですので、サーバ側に保存する仕組み(データベースなど)が必要になります。
退会済みユーザー

退会済みユーザー

2015/06/10 05:12

なるほど、理解いたしました。 localstorageからとっている限りできないということですね。 ありがとうございます!
guest

0

localStorageは端末毎で保存され、共有されないという事は理解されていますでしょうか?
localStorage.getItem("name")としても、自分の端末の場合は自分のname、他人の端末の場合は他人のnameしか取得できません。

投稿2015/06/10 04:04

chiku_

総合スコア1464

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

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

退会済みユーザー

退会済みユーザー

2015/06/10 05:12

なるほど、理解いたしました。 localstorageからとっている限りできないということですね。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問