1

次のような JSON データを吐き出すバックエンド アプリケーションがあります。

[{"id":1,"line_number":"604"},{"id":2,"line_number":"610"}]

私のモバイル アプリは、Jquery-Mobile の mobileinit 関数で、localStorage を使用してその配列を文字列として保存しています。

localStorage.variable = getBusesList();

次に、その関数は次のことを行います。

function getBusesList(){
  var busesJSONArray = [];
  $.getJSON('someURL', function(data){  
    $.each(data, function(key, value){
        busesJSONArray.push( { id: value.id, line_number: value.line_number } );
    });
  });
  var JSONObject = {
    buses: busesJSONArray
  };

  alert("busesJSONArray :" + busesJSONArray);
  alert(" getBusesList Done: " + JSON.stringify(JSONObject));
  return JSON.stringify(JSONObject);
}

getJSON 関数は正常に機能しています。問題はそこにあるべきではありません。オブジェクトの配列を含む文字列を返す必要があります。これは、ブラウザ コンソールにコマンドを直接入力すると機能します。しかし、モバイル アプリを実行すると、最初のアラートには "busesJSONArray: " があり、2 番目のアラートには "getBusesList Done: {"buses":[]}" があります。

実際には:

>localStorage.buses
"{"buses":[]}"

これは奇妙です。何が起こっているのかについてのヒントは大歓迎です。ありがとう!

4

1 に答える 1