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

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

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

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

jQuery

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

Q&A

解決済

3回答

479閲覧

ローカルストレージに「入りきらなかったこと」は判定できますか?

kasumisou

総合スコア9

JavaScript

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

jQuery

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

0グッド

3クリップ

投稿2019/12/16 22:57

編集2019/12/16 23:06

###実現したいこと
PHPからデカい値を取得しローカルストレージに入れるにあたって、その成否を判定したいです。

###発生している問題
値がデカいため入りきらなかったときは別の処理を行いたいのですが、「入りきらなかったこと」を判定する方法がわかりません。

###該当のソースコード
下記でPHPから取得します。dekaiがデカい値で、これが入ったかどうかを判定したいです。

jQUery

1function dekaiInsert(){ 2 $.ajax({ url:'http://example.com/ajax', type:'POST', data:{action:'dekaiAjax'} }) 3 .done(function( dekai ) { 4 localStorage.setItem( 'デカい値', dekai ); 5 }); 6}

###試したこと
上の実行後に、「そのキーへアクセスできること」を判定すれば出来るかもと思い、下記hasLocalStorage()を試しました。

しかし「入りきらなかったこと」とは無関係なようで、入りきらなかった場合でもtrueが返ってしまいました。

jQuery

1$(window).on('load', function() { 2 3 // デカい値を入れる 4 dekaiInsert(); 5 6 // 入りきらなければfalseとしたいが、trueが返ってしまう 7 var hantei = hasLocalStorage( 'デカい値' ); 8 console.log( '判定結果', hantei ); 9 10 // 「入りきらなかったこと」を判定して処理を分けたい 11 if ( hantei ) { 12 // 入りきったときの処理 13 }else{ 14 // 入りきらなかったときの処理 15 } 16}); 17 18// 「そのキーへアクセスできること」を判定 19function hasLocalStorage( checkKey ) { 20 try { 21 window.localStorage.setItem(checkKey, 1); 22 window.localStorage.getItem(checkKey); 23 return true; 24 } catch(e) { 25 return false; 26 } 27} 28

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

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

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

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

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

y_waiwai

2019/12/16 23:15 編集

そのでかい値というのは値がでかいものなんでしょうか で、その入りきらなかった、というのはどういう現象のことを言ってるんでしょうか。 ちと質問文が意味不明です
kasumisou

2019/12/16 23:17

「でかい値」というのは「値がでかいもの」です。「Aだけが1億文字」でもOKです。 「入りきらなかった」とは「ローカルストレージの容量以上にでかかったために、入りきらなかった」という現象のことです。1億文字は入りきらないですからね。
y_waiwai

2019/12/16 23:20

値じゃなくて、サイズがでかいもの、なんですね
y_waiwai

2019/12/16 23:27

で、入りきらなったとき、というのはそれはどういう値になるんでしょうか
m.ts10806

2019/12/16 23:36

それぞれブラウザによって容量に上限があることはご存じでしょうか。 というか、そういう判定が必要なほどサイズがあるのでしたらLocalStorageは悪手です。
guest

回答3

0

ぱっと思いついたものを記載します。
書き込み時に容量が多かった場合はQuotaExceededErrorが発生されるので、それをcatchすればよいと思います。
書き込みと判定を別処理にしたい場合は、Flagを使えばよいかと。

以下追記
容量を判定するにわかりやすいサイトを見つけました。
リンク内容
chromeのデベロッパーツールからソースコードを探してみてください。

投稿2019/12/17 00:31

編集2019/12/17 04:36
makosankibu

総合スコア289

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

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

kasumisou

2019/12/17 02:47

ありがとうございます。
kasumisou

2019/12/17 03:08

すみません、それはどう書きますか??
makosankibu

2019/12/17 03:58

書き込み時の処理(localStorage.setItem)をtry...catch文で囲めばいいんじゃないんですか?
kasumisou

2019/12/17 04:06

質問のコードのことですよね?お時間あるときに具体的に書いていただけませんでしょうか。お手間取らせて申し訳ございません。
makosankibu

2019/12/17 04:27

すみませんが、具体的に書きたくありません。 何故なら、kasumisouさんが記載したコードの中に私が回答したtry...catch文が正しく使用されていて、且、具体的な使用方法も明示したにもかかわらず私にコードを書かせようとしているということは、kasumisouさん自身が具体的なコードを書けない(質問文に記載しているコードを書く知識もないのにかかわらず自身が作成したかのように記載している)事を示しているからです。 そのような状態での質問は作業依頼、丸投げの質問といいます。 このサイトでも非推奨の質問とされていますし、私個人としても嫌な気持ちになるため、申し訳ありませんが、具体的には書けません。 これを機に自身のコードについてきちんと理解して頂きたいと強く思います。
kasumisou

2019/12/17 04:44

うわ、いいです、いいです。ありがとうございました。
makosankibu

2019/12/17 04:51

なるほど、あなたがどういう人か理解しました。 礼には及びません。
kasumisou

2019/12/17 05:05

申し訳ございません。嫌な書き方をしてしまいました。お叱りありがとうございます。
guest

0

既にベストアンサーがついていますが、makosankibuさんが指摘されているように、どのみち例外が発生するわけですから、try ~ catch を使わないと処理が継続できません。そして、どうせ try ~ catch を書くのであれば、わざわざサイズのチェックなどしなくても、catchの時点で「書き込めなかった」ことがわかります。

ということで、少なくとも try ~ catch は必須です。

それと、質問者さんはコードを動かしてみたのでしょうか。実際に大きなデータを入れてみれば、例外が発生することはすぐに分かると思います。

投稿2019/12/17 06:11

ockeghem

総合スコア11701

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

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

0

ベストアンサー

状況がよくわかりませんが一般的に
書き込んだものを呼び出して、サイズが違えば失敗じゃないでしょうか?

投稿2019/12/17 01:54

yambejp

総合スコア114775

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

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

kasumisou

2019/12/17 02:47

ありがとうございます。デカい値のサイズは都度異なるので、サイズを測るという方法は難しそうです。
yambejp

2019/12/17 02:54

.done(function( dekai )でdekaiを得てるんですから 「サイズを測るという方法は難しそう」の意味がわかりません localStorage.setItem( 'デカい値', dekai ); console.log(dekai.length==localStorage.getItem( 'デカい値').length);
kasumisou

2019/12/17 03:06

失礼致しました。仰る通りでした。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問