Неизвестная ошибка плагина jQuery.csv()

#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 устранило проблему. так что это уже кое-что. спасибо 🙂