#javascript #jquery
#javascript #jquery
Вопрос:
Предупреждение: стена текста
Я использую плагин jQuery.csv для загрузки csv-файла в массив. До недавнего времени все работало просто отлично. Я не знаю, изменилось ли что-нибудь, но вместо того, чтобы работать, он отображает следующую ошибку в консоли:
Uncaught TypeError: Object function (a,b){return new c.fn.init(a,b)} has no method 'csv'
Я вызываю его (так же, как и раньше), используя метод, описанный в документации плагина:
jQuery.get(csvfile, function(data) { array = jQuery.csv()(data); });
сам файл плагина очень короткий:
/* Usage:
* jQuery.csv()(csvtext) returns an array of arrays representing the CSV text.
* jQuery.csv("t")(tsvtext) uses Tab as a delimiter (comma is the default)
* jQuery.csv("t", "'")(tsvtext) uses a single quote as the quote character instead of double quotes
* jQuery.csv("t", "'"")(tsvtext) uses single amp; double quotes as the quote character
*/
;
jQuery.extend({
csv: function(delim, quote, linedelim) {
delim = typeof delim == "string" ? new RegExp( "[" (delim || "," ) "]" ) : typeof delim == "undefined" ? "," : delim;
quote = typeof quote == "string" ? new RegExp("^[" (quote || '"' ) "]" ) : typeof quote == "undefined" ? '"' : quote;
lined = typeof lined == "string" ? new RegExp( "[" (lined || "rn") "] ") : typeof lined == "undefined" ? "rn" : lined;
function splitline (v) {
// Split the line using the delimitor
var arr = v.split(delim),
out = [], q;
for (var i=0, l=arr.length; i<l; i ) {
if (q = arr[i].match(quote)) {
for (j=i; j<l; j ) {
if (arr[j].charAt(arr[j].length-1) == q[0]) { break; }
}
var s = arr.slice(i,j 1).join(delim);
out.push(s.substr(1,s.length-2));
i = j;
}
else { out.push(arr[i]); }
}
return out;
}
return function(text) {
var lines = text.split(lined);
for (var i=0, l=lines.length; i<l; i ) {
lines[i] = splitline(lines[i]);
}
return lines;
};
}
});
я использую jQuery.noConflict() таким образом:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
<script type="text/javascript">
jQuery.noConflict();
</script>
<script type="text/javascript" src="<?php echo $path ?>/js/jquery.csv.js"></script>
<script type="text/Javascript" src="<?php echo $path ?>/js/script.js"></script>
насколько я могу судить, плагин пытается использовать .extend для добавления функции ‘csv’ к объекту jQuery, и что это не работает. кто-нибудь видел / решил эту проблему? я также предполагаю, что недавно было внесено изменение в 1.5.1, но изменение на 1.5.2 ничего не меняет.
заранее спасибо.
Ответ №1:
Отлично работает на JSFiddle с jQuery 1.5.1.
Убедитесь, что ваш оператор заключен в блок ‘onload’.
jQuery(document).ready(function() {
...
...
jQuery.get(csvfile, function(data) { array = jQuery.csv()(data); });
});
Кроме того, я вижу, что вы используете PHP для указания пути к файлу плагина CSV. Убедитесь, что путь, выводимый из PHP, все еще действителен.
Комментарии:
1. пути действительны, я это проверил. и это вызывается в функции, которая вызывается при загрузке.
2. хотя добавление кода для плагина в onload устранило проблему. так что это уже кое-что. спасибо 🙂