26472


monaca で localStorage を使用しているのですが、localStorage.setItem で保存し、  
resources に表示されているデータを取得しようとしても、null が返ってきてしまいます。

setItem した直後に getItem にて
console.logを確認すると、その時はlogに中身が表示されるのですが、違う関数から取得しようとしてもnullにしかならず原因がわかりません

どのようなことが考えられるでしょうか？  
ご教授お願いいたします

コードを追記いたしました  
①の時は、localStorageから取得できるのですが、②の時はnullになってしまいます

更に追記いたしました  
17行目に、変数xxxのコードを書き忘れておりました

[code]

    //①
    function dataload(){
      var httpobj = jQuery.get("./data/000.txt",null,function(){
        document.getElementById("result").innerHTML = parseTabText(httpobj.responseText);
      });
    }
    function parseTabText(tabText){
      var resultText = "<table border='0' cellspacing='0' class='sampletable'>";
      var LF = String.fromCharCode(10);
      var TAB = String.fromCharCode(9);
      lineData = tabText.split(LF);
      findText = document.ajaxForm.requestText.value;
      for (var i=0; i<lineData.length; i++){
        itemData = lineData[i].split(TAB);
        str = itemData[0].match(findText);
        if (str){
        var xxx = itemData[2];//ここを入れ忘れておりました
          resultText += '<tr><td>'+itemData[0]+'</td><td>'+itemData[1]+'</td><td>点</td><td onclick="searchpage2('+itemData[2]+')">詳 細</td></tr>';
          localStorage.setItem(xxx,JSON.stringify(itemData));
          console.log(JSON.parse(localStorage.getItem(xxx))); //この段階では正しく表示されます
        }
      }
      resultText += "</table>";
      return resultText;
    }
    
    //②
    function searchpage2(xxx){
      var options =  {
        animation:'lift',
        onTransitionEnd:function(){
          var data = JSON.parse(localStorage.getItem(xxx));
          console.log(JSON.parse(localStorage.getItem(xxx)));//ここではnull
          document.getElementById("memoA").innerHTML = data;
        }
      };
      myNavigator.pushPage('page2_memoedit.html',options);
    }
    
[/code]


CC BY-SA 3.0
2016-06-04T14:51:32.077
25448
2016-06-05T16:32:53.110
2016-06-05T07:10:20.083
15760
15760
question
javascript monaca html5
monaca の localstorage で resources に載っているのに取得できない


`<td onclick="searchpage2('+itemData[2]+')">詳 細</td>`が原因です。

例えば、`itemData[2]`の値が`'0'`の場合、`searchpage2('0')`ではなく`searchpage2(0)`となります。  
`searchpage2()`の引数`xxx`には数値の`0`が渡るので、`JSON.parse(localStorage.getItem(xxx))`は`null`が返ってきます。  
`itemData[2]`の値が英字の文字列だと、英字の文字列という名の変数が定義されていないとエラーになります。

この場合、文字列がシングルクォーテーションで囲ってあるので、その中にシングルクォーテーションを書くときはバックスラッシュ(￥マーク)を先頭に付けます。

[code]

      resultText += '<tr><td>'+itemData[0]+'</td><td>'+itemData[1]+'</td><td>点</td><td onclick="searchpage2(\''+itemData[2]+'\')">詳 細</td></tr>';
    
[/code]


CC BY-SA 3.0
2016-06-05T11:18:24.390
26472
2016-06-05T16:32:53.110
2016-06-05T16:32:53.110
9566
9566
25448
answer