次のような 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":[]}"
これは奇妙です。何が起こっているのかについてのヒントは大歓迎です。ありがとう!