我有一个后端应用程序吐出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":[]}"
这很奇怪。任何有关正在发生的事情的提示都将不胜感激。 谢谢!
答案 0 :(得分:2)
您正在使用异步的$.getJSON
,只有回调函数中的代码才能从URL中检索信息。
此代码:
var JSONObject = {
buses: busesJSONArray
};
alert("busesJSONArray :" + busesJSONArray);
alert(" getBusesList Done: " + JSON.stringify(JSONObject));
return JSON.stringify(JSONObject);
将没有$.getJSON
调用中恢复的信息,因此它不会按照您的预期执行,您需要重新编写逻辑以在回调中工作。
它在控制台中工作,因为您在输入其他命令之前等待异步调用完成。