localStorage不存储串行的JSON对象数组

时间:2013-10-30 16:55:32

标签: json html5 jquery-mobile local-storage

我有一个后端应用程序吐出JSON数据,如下所示:

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

我的移动应用程序使用localStorage将该数组存储为字符串,在Jquery-Mobile的mobileinit函数中:

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函数正常工作。问题不应该存在。 它应该返回一个包含Objects数组的字符串。如果我直接在浏览器控制台中键入命令,则此方法有效。但是如果运行移动应用程序,第一个警报有:“busJSONArray:”,第二个警报:“getBusesList Done:{”bus“:[]}”。

实际上:

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

这很奇怪。任何有关正在发生的事情的提示都将不胜感激。 谢谢!

1 个答案:

答案 0 :(得分:2)

您正在使用异步的$.getJSON,只有回调函数中的代码才能从URL中检索信息。

此代码:

var JSONObject = {
  buses: busesJSONArray
};

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

将没有$.getJSON调用中恢复的信息,因此它不会按照您的预期执行,您需要重新编写逻辑以在回调中工作。

它在控制台中工作,因为您在输入其他命令之前等待异步调用完成。