2014-03-19 78 views
0

我想導出/下載信息到文件。在我的瀏覽器中,它可以正常工作,但只要在我的手機應用程序中使用它,它所做的只是將文件作爲文本打開,無法保存,因此無法回到應用程序。 有什麼建議嗎?順便說一句,我不是js專家 - 更像新手!Phonegap - 如何下載文件

function dbError(e) { 
     console.log("SQL ERROR"); 
     console.dir(e); 
    } 

    function backup(table) { 
    var def = new $.Deferred(); 
    curatio.webdb.db.readTransaction(function(tx) { 
     tx.executeSql("select * from "+table, [], function(tx,results) { 
      var data = convertResults(results); 
      console.dir(data); 
      def.resolve(data); 
     }); 
    }, dbError); 

    return def; 
} 

$(document).on("click", "#doBackupBtn", function(e) { 
    e.preventDefault(); 
    console.log("Begin backup process"); 

    $.when(
     backup("allergies") 

    ).then(function(allergies, log) { 
     console.log("All done"); 
     var data = {allergies:allergies} 
     var serializedData = JSON.stringify((data), null, 4); 
     console.log(serializedData); 
     download("Export.csv", serializedData); 

     (function(console){ 

console.save = function(data, filename){ 

    if(!data) { 
     console.error('Console.save: No data') 
     return; 
    } 

    if(!filename) filename = 'console.json' 

    if(typeof data === "object"){ 
     data = JSON.stringify(data) 
    } 

    var blob = new Blob([data], {type: 'text/json'}), 
     e = document.createEvent('MouseEvents'), 
     a = document.createElement('a') 

    a.download = filename 
    a.href = window.URL.createObjectURL(blob) 
    a.dataset.downloadurl = ['text/json', a.download, a.href].join(':') 
    e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null) 
    a.dispatchEvent(e) 
} 
})(console) 


    }); 

}); 


    function download(filename, content) { 
    var pom = document.createElement('a'); 
    pom.setAttribute('href', 'data:text/csv;charset=utf-8,' + encodeURIComponent(content)); 
    pom.setAttribute('download', filename); 
    pom.click(); 
    } 

    //Generic utility 
function convertResults(resultset) { 
    var results = []; 
    for(var i=0,len=resultset.rows.length;i<len;i++) { 
     var row = resultset.rows.item(i); 
     var result = {}; 
     for(var key in row) { 
      result[key] = row[key]; 
     } 
     results.push(result); 
    } 
    return results; 
} 


     </script> 

回答

2

如果我閱讀它是正確的,您想要將數據庫導出(並導入?)到文件中。

我在Github上編寫了一些代碼,可以在我的Gist上執行此操作,這在我的blogpost中也有解釋。在那個代碼中,你所要做的就是更改SQL查詢和屬性。它將數據庫導出到基於JSON的文件。

+0

謝謝,看起來像我在找什麼。 – user2110655

+0

不客氣。 –