2013-04-17 2 views
0

Я хочу предварительно загрузить 9000 записей через файл или все, что лучше. Идея заключается в том, что я хочу, чтобы там было где-то 9000 записей, и я хочу загрузить их в sqlite DB через телефонную защелку. У меня есть все это, работающие, а затем загрузка данных откуда-то. Вот то, что я до сих порКак загрузить исходные данные через javascript?

У меня есть файл файл records.csv и вот мой код

function populate_events_from_csv(db){ 
    var event_data; 
    $.ajax({ 
     type: "GET", 
     url: "records.csv", 
     dataType: "text/csv", 
     error: function (request, status, error) { 
     console.log('fail'); 
     console.log(request.responseText); 
     }, 
     success: function(data) { 
       console.log('success'); 
       event_data = $.csv.toObjects(data); } 
    }); 
    console.log(event_data); 
    db.transaction(function(tx) { 
    var q = 'INSERT INTO Events (id, name) VALUES (?, ?)'; 
     _(event_data).each(function(row) { 
     tx.executeSql(q, [row.id, row.name]); 
     }); 
    }); 
} 

Этот подход будет работать, но это не удается из-за одинарные и двойные кавычки в записях CSV

Если кто-нибудь увидит, что я делаю неправильно или другое решение, сначала вставив эти 9000 записей

+0

Попробуйте заменить кавычки в файле csv как 'var expr = new RegExp ('' ',' g '); data = data.replace (expr,' \\" '); '. – Victor

+0

Можете ли вы предоставить '$ .csv'? – Dom

+1

Почему вы думаете, что что-то не так с цитатами? Выполняет ли 'executeSql' или' csv.toObjects' их правильность? Если это так, укажите код функции и образец CSV – Bergi

ответ

1
function populate_events_from_csv(db) { 
    var event_data; 
    $.ajax({ 
     type: "GET", 
     url: "records.csv", 
     dataType: "text/csv", 
     error: function (request, status, error) { 
      console.log('fail'); 
      console.log(request.responseText); 
     }, 
     success: function (data) { 
      console.log('success'); 
      event_data = $.csv.toObjects(data); 
      db.transaction(function (tx) { 
       var q = 'INSERT INTO Events (id, name) VALUES (?, ?)'; 
       _(event_data).each(function (row) { 
        tx.executeSql(q, [row.id, row.name]); 
       }); 
      }); 
     } 
    }); 

} 
+0

должен' _ ('не быть' $ ('? – tucuxi

+0

@tucuxi. Возможно, он использует Underscore. js: http://underscorejs.org/#each – jgillich

+0

спасибо, аналогичная функциональность под тем же именем с '$ (что-то) .each (function (index, object) {})' отбросила меня – tucuxi

0

Почему бы не преобразовать данные в формате JSON, который сделает его загрузки п астра в ваш javascript (минимальный парсинг) и упростить код одновременно?

После JSONized, вы будете иметь возможность написать

function populate_events(db, url) { 
    $.getJSON(url).done(function(data) { 
     db.transaction(function (tx) { 
      var q = 'INSERT INTO Events (id, name) VALUES (?, ?)'; 
      $(data).each(function (index, row) { 
       tx.executeSql(q, [row.id, row.name]); 
      }); 
     }); 
    }).fail(function(request, status, error) { 
     console.log('fail'); 
     console.log(request.responseText); 
    }); 
} 

Преобразование CSV в формате JSON оставляется в качестве упражнения, но есть много инструментов, которые там могут справиться с задачей. Я бы использовал скрипт Python (библиотеки csv + json).

+0

Кроме того, этот код решает * * актуальная ** проблема в исходном коде: вы пытаетесь использовать 'event_data' перед назначением ему. Если вы хотите, чтобы ваш исходный код работал, сделайте AJAX-вызов' async: false'. – tucuxi

Смежные вопросы