我正在将一个大文本文件从服务器下载到 phonegap 应用程序。文本是字符串形式的有效 JSON。我将文本数据写入设备的文件系统,然后再读取。我使用文件阅读器获取文本数据,这似乎工作正常。当我解析字符串 JSON 时,就会出现问题。
当我下载一个包含 2500 个元素(从数据库返回并以 json 格式返回的记录)的文本文件时,JSON.parse(stringJSON) 函数可以正常工作并返回一个 JSON 对象,但是如果我将从服务器返回的元素数量增加到3000 然后我没有得到响应,json 输出似乎格式正确。它看起来像一个内存问题,JSON数据最多1.5MB,使用jquery的JSON.parse解析太多了,带有phonegap。我查看了这个页面并尝试包含 parse_json 而不是 JSON.parse 并且它仍然没有返回任何内容(我在我的页面中包含了相关脚本)。
var ft = new FileTransfer();
ft.onprogress = function(progressEvent) {
if (progressEvent.lengthComputable) {
var perc = Math.abs(Math.floor((progressEvent.loaded / progressEvent.total) * 100));
$loading.html(perc + " Loading...")
} else {
if($loading.innerHTML == "") {
$loading.innerHTML = "Loading";
} else {
$loading.innerHTML += ".";
}
}
};
var dlPath = DATADIR_separate.fullPath + "/"+foldername_separate+".html";
ft.download("http://downloadURL", dlPath, function(){
alert('saved');
$loading.hide();
remove_permanent_overlay();
}, function(){
alert('fail');
$loading.hide();
remove_permanent_overlay();
});
然后在所有文件阅读器回调之后:
function readAsText_READ(file) {
var reader = new FileReader();
reader.onloadend = function(evt) {
alert('loaded');//this fires, so filereader is working
//alert(evt.target.result);//this alerts even with a large string
//var parseTarget = JSON.parse(evt.target.result);//works for smaller strings fails with larger strings
console.log('parsing now...');
var parseTarget = json_parse(evt.target.result);//same result as JSON.parse
console.log(parseTarget);
//var parseTarget = $.parseJSON( evt.target.result );
//var parseTarget = eval( "("+evt.target.result+")" );
//alert(parseTarget);
alert(parseTarget["879"]);
};
reader.readAsText(file);
//reader.readAsDataURL(file)
alert('reading file: '+file);
}
*编辑在 phonegap 的 weinre 调试器中,当我尝试读取大的 json 字符串时,我得到以下信息。
parsing...
processMessage failed: Message: S01 File1238321490
s{"really long json... jsonetc..."}
processMessage failed: Error: [object Object]
processMessage failed: Stack: undefined
不太清楚这些错误消息是什么意思,我会尝试找出...
任何帮助将不胜感激。