2015-01-02 2 views
5

okurken tanımsız bir değer döndürüyor Hedefim bir CSV dosyasını açmak ve ardından içeriğini PapaParse kullanarak bir <div> ürününe ayrıştırmaktır. Şimdiye kadar çalışıyor gibi görünüyor ama gerçek değerler yerine sadece tanımsız bir şekilde döner. Neyin yanlış olduğunu bilmiyorum, garip bir CSV dosyası (Save As ile bir excel tablosundan yaptım) olabilir, ya da sadece özensiz kodlama olabilir.PapaParse, CSV

JS

<div class="graphcontainer">Parser Output:</div> 
<div class="buttoncontainer"> 
    <input type="file" id="csv-file" name="files"/> 
</div> 

düzenlemek

var data; 

function handleFileSelect(evt) { 
    var file = evt.target.files[0]; 

    Papa.parse(file, { 
     header: true, 
     dynamicTyping: true, 
     complete: function (results) { 
      data = results; 
     } 
    }); 
    $(".graphcontainer").append("<div class='parse'>" + data + "</div>"); 
} 

$(document).ready(function() { 
    $("#csv-file").change(handleFileSelect); 
}); 

HTML: Buraya I (http://www.topdeckandwreck.com/excel%20graphs/) ile test ettik dosyalardır. Kullanıcı herhangi bir CSV dosyası açabilmek ve daha sonra bunun dışında bir grafik yapma :)

+0

farklı CSV dosyaları ile denedikten sonra sadece döndürür [Object object] –

+0

Sorunuza kullandığınız CSV dosyalarını eklemek isteyebilirsiniz. – Tomalak

cevap

10

Sen çok büyük olasılıkla bir zamanlama sorunu için bu hedefi olarak bu gerçekten alakalı olup olmadığını bilmiyorum.

Papa bir sahte işareti bir complete geri arama sunmaktadır olduğu gerçektir, uyumsuz bir kütüphanesidir.

Bu, anlamına gelir, sonuçları A'dan B'ye aktarmak için genel bir değişken kullanamazsınız. Aslında, genel olarak genel değişkenlerden kaçınmalısınız.

Sonuç hazırlandıktan sonra yapılması gereken tüm işler geri arama işlevinde yapılmalıdır. Bu, JavaScript'teki tüm zaman uyumsuz işlemlere uygulanır.

function handleFileSelect(evt) { 
    if (!(evt.target && evt.target.files && evt.target.files[0])) { 
     return; 
    }  
    Papa.parse(evt.target.files[0], { 
     header: true, 
     dynamicTyping: true, 
     complete: function (results) { 
      debugDataset(results); 
      renderDataset(results); 
     } 
    }); 
} 

function debugDataset(dataset) { 
    var formatted = JSON.stringify(dataset, null, 2); 
    $("<div class='parse'></div>").text(formatted).appendTo(".graphcontainer"); 
} 

function renderDataset(dataset) { 
    // render code here... 
} 

$(function() { 
    $("#csv-file").change(handleFileSelect); 
}); 
+0

şey yüzden oynamak amacıyla sadece global değişken yapılmış olsa daha iyi olacağını düşündüm 2 değerlere (x, y) üzerinden grafikleri yapar başka kütüphaneden bir işlev değişkeni kullanabilmek için istiyorsun, Daha ileride. Burada sadece neler olduğunu görmek için bir div üzerinde çıkarım (F12'nin konsolda hiçbir şey göstermemesi için). sonuç sadece şimdi [object Object] Eğer küresel değişkeni ayarlanmamış olacak ne zaman bilmiyorum çünkü –

+0

Hayır, bir global değişken kullanamazsınız tüm dosyalar üzerinde verir, hala aynı. **, geri aramada tüm sonuç işlemlerini yapmalısınız. İpucu: Bu geri çağrıdaki işlevleri çağırdığınızda, teknik olarak hala geri aramadasınız demektir. Bu kodu tek bir işleve sokmak zorunda değilsiniz, sadece tüm işlemleri tetiklemeniz gerekiyor. – Tomalak

+0

ayrıştırıcı hala çıkışı [object Object] yerine gerçek verilerin olursa olsun ne kullanın CSV dosyası (rastgele çevrimiçi jeneratör ile bazı yapım çalıştı). –

0

Ben aslında tamamlanmadan zaman sonuçları görmek istediğiniz düşünüyorum:

function handleFileSelect(evt) { 
    var file = evt.target.files[0]; 

    Papa.parse(file, { 
     header: true, 
     dynamicTyping: true, 
     complete: function (results) { 
      var data = results; 
      $(".graphcontainer").append("<div class='parse'>" + data + "</div>"); 
     } 
    }); 
} 
+1

Bu benim cevabımın tam olarak söylediği türden bir şey ...;) – Tomalak

+0

Bazıları nedense farketmediğim Hum: -P – blint

0

Tamam sorun çözüldü böylece, çözelti

(var results.data içermesi gerekir) şudur

{

function handleFileSelect(evt) { 
    var file = evt.target.files[0]; 

    Papa.parse(file, { 
     complete: function (results) { 
      var data = results.data; 
      $(".graphcontainer").append("<div class='parse'>" + data + "</div>"); 
     } 
    }); 
} 

$(function() { 
    $("#csv-file").change(handleFileSelect); 
}); 

}

Diğerlerinden yardım için teşekkürler

+1

İpucu: Kodunuz kendi kendine yeten ve çalıştırılabilir değilse, sadece * "{} kullanın. (Kod Örneği) * * "Kod Snippet'i" * düğmesi yerine * düğmesi. Bu şekilde, yanıtınızda işlevsel olmayan bir "Çalıştır kod pasajı" düğmesinin oluşturulmasını önlersiniz. – Tomalak