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:”,第二个警报有:“getBusesList Done: {"buses":[]}"。

有效:

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

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

4

1 回答 1

2

您使用$.getJSON的是异步的,只有回调函数内的代码才会从 URL 中检索到信息。

这段代码:

var JSONObject = {
  buses: busesJSONArray
};

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

不会有在$.getJSON调用中恢复的信息,所以它不会做你所期望的,你需要重新设计你的逻辑才能在回调中工作。

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

于 2013-10-30T17:43:56.603 回答