Javascript 将海量数据上载到Firebase

Javascript 将海量数据上载到Firebase,javascript,jquery,csv,firebase,Javascript,Jquery,Csv,Firebase,我试图将我的CSV数据上传到Firebase,但它抛出了一个奇怪的错误。我对JavaScript不太熟悉,所以这可能是问题的一部分 这是我要上传的数据: 704,STANDARD,PARC PARQUE,PR,NOT ACCEPTABLE,17.96,-66.22,"Parc Parque, PR" 704,STANDARD,SECT LANAUSSE,PR,NOT ACCEPTABLE,17.96,-66.22,"Sect Lanausse, PR" 704,STANDARD,URB EUGE

我试图将我的CSV数据上传到Firebase,但它抛出了一个奇怪的错误。我对JavaScript不太熟悉,所以这可能是问题的一部分

这是我要上传的数据:

704,STANDARD,PARC PARQUE,PR,NOT ACCEPTABLE,17.96,-66.22,"Parc Parque, PR"
704,STANDARD,SECT LANAUSSE,PR,NOT ACCEPTABLE,17.96,-66.22,"Sect Lanausse, PR"
704,STANDARD,URB EUGENE RICE,PR,NOT ACCEPTABLE,17.96,-66.22,"Urb Eugene Rice, PR"
704,STANDARD,URB GONZALEZ,PR,NOT ACCEPTABLE,17.96,-66.22,"Urb Gonzalez, PR"
我没有使用任何花哨的方式尝试上传文档,这似乎是以我想要的方式上传所有内容的最快方式:

<!DOCTYPE html>

<head>
</head>

<body>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="https://cdn.firebase.com/js/client/2.4.2/firebase.js"></script>
<script type="text/javascript">
$(function () {
    var myFirebaseRef = new Firebase("https://<firebasetag>.firebaseio.com/coordinates");

    var onComplete = function(error) {
      if (error) {
        console.log('Synchronization failed: ' + error);
      } else {
        console.log('Synchronization succeeded');
      }
    };

    $("#upload").bind("click", function () {
        var regex = /^([a-zA-Z0-9\s_\\.\-:])+(.csv|.txt)$/;
        if (regex.test($("#fileUpload").val().toLowerCase())) {
            if (typeof (FileReader) != "undefined") {
                var reader = new FileReader();
                reader.onload = function (e) {
                    var rows = e.target.result.split("\n");
                    for (var i = 0; i < rows.length; i++) {
                        var cells = rows[i].split(",");
                        myFirebaseRef.set({
                            [cells[0]]: {
                                zipcodetype: cells[1],
                                city: cells[2],
                                state: cells[3],
                                locationtype: cells[4],
                                latitude: cells[5],
                                longitude: cells[6],
                                locationttext: cells[7]
                            }
                        }, onComplete);                    
                    }
                }
                reader.readAsText($("#fileUpload")[0].files[0]);
            } else {
                alert("This browser does not support HTML5.");
            }
        } else {
            alert("Please upload a valid CSV file.");
        }
    });
});
</script>
<input type="file" id="fileUpload" />
<input type="button" id="upload" value="Upload" />
</div>

</body>

<html>

$(函数(){
var myFirebaseRef=新的Firebase(“https://.firebaseio.com/coordinates");
var onComplete=函数(错误){
如果(错误){
console.log('同步失败:'+错误);
}否则{
log('同步成功');
}
};
$(“#上载”).bind(“单击”),函数(){
var regex=/^([a-zA-Z0-9\s\\\.\-:])+(.csv|.txt)$/;
if(regex.test($(“#fileUpload”).val().toLowerCase()){
if(typeof(FileReader)!=“未定义”){
var reader=new FileReader();
reader.onload=函数(e){
var rows=e.target.result.split(“\n”);
对于(变量i=0;i
以下是数据库中显示的所有内容:

它只上传一行,但“同步成功”总是在我的控制台中打印出来


我希望它上传每一行,因为我的原始数据大约有90000行长。帮助?

对于任何在代码中寻找答案的人来说,这就是工作模式

<!DOCTYPE html>

<head>
</head>

<body>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="https://cdn.firebase.com/js/client/2.4.2/firebase.js"></script>
<script type="text/javascript">
$(function () {
    var myFirebaseRef = new Firebase("https://<firebaseid>.firebaseio.com/coordinates");

    $("#upload").bind("click", function () {
        var regex = /^([a-zA-Z0-9\s_\\.\-:])+(.csv|.txt)$/;
        if (regex.test($("#fileUpload").val().toLowerCase())) {
            if (typeof (FileReader) != "undefined") {
                var reader = new FileReader();
                reader.onload = function (e) {
                    var rows = e.target.result.split("\n");
                    for (var i = 0; i < rows.length; i++) {
                        var cells = rows[i].split(",");
                        myFirebaseRef.push({
                            [cells[0]]: {
                                zipcodetype: cells[1],
                                city: cells[2],
                                state: cells[3],
                                locationtype: cells[4],
                                latitude: cells[5],
                                longitude: cells[6],
                                locationttext: cells[7]
                            }
                        });                    
                    }
                }
                reader.readAsText($("#fileUpload")[0].files[0]);
            } else {
                alert("This browser does not support HTML5.");
            }
        } else {
            alert("Please upload a valid CSV file.");
        }
    });
});
</script>
<input type="file" id="fileUpload" />
<input type="button" id="upload" value="Upload" />
</div>

</body>

<html>

$(函数(){
var myFirebaseRef=新的Firebase(“https://.firebaseio.com/coordinates");
$(“#上载”).bind(“单击”),函数(){
var regex=/^([a-zA-Z0-9\s\\\.\-:])+(.csv|.txt)$/;
if(regex.test($(“#fileUpload”).val().toLowerCase()){
if(typeof(FileReader)!=“未定义”){
var reader=new FileReader();
reader.onload=函数(e){
var rows=e.target.result.split(“\n”);
对于(变量i=0;i
如果所有
单元格[0]
都等于704,您希望得到什么结果???它只上载一行,而不是整个文档。当我用控制台打印替换firebase上载时,它会打印所有内容。关于我如何处理firebase调用的一些信息阻止了此代码中的大规模上载,但因为您总是设置相同的项,覆盖了前一项,704==704。我不是火箭筒,但你可能想推它:嗯。。。。天哪,我才意识到。谢谢你向我指出这一点。直到最后,我才想到它会用新数据覆盖save。你知道有什么补救办法吗?上面写着“等到最后一次firebase呼叫完成后再继续”?你可能不是morron。。。很高兴你已经修复了它和thx张贴相关的答案。这对任何未来的读者都会很有帮助。