サーバーから phonegap アプリに大きなテキスト ファイルをダウンロードしています。テキストは、文字列形式の有効な JSON です。テキスト データをデバイスのファイル システムに書き込み、後で読み取ります。ファイルリーダーを使用してテキストデータをフェッチすると、これはうまくいくようです。問題が発生するのは、文字列 JSON を解析するときです。
2500 要素 (DB から返され、json 形式で返されるレコード) を含むテキスト ファイルをダウンロードすると、JSON.parse(stringJSON) 関数は正常に動作し、JSON オブジェクトを返しますが、サーバーから返される要素の数を増やして3000 その後、応答がありません。json 出力は正しくフォーマットされているようです。メモリの問題のようです.JSONデータは最大1.5MBです.jqueryのJSON.parseをphonegapで使用して解析するには多すぎます. このページを見て、JSON.parse の代わりに parse_json を含めてみましたが、まだ何も返されません (関連するスクリプトをページに含めました)。
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
これらのエラーメッセージの意味がよくわからないので、調べてみます...
どんな助けでも大歓迎です。