Сегодня занимался обновлением скрипта uploadify.js, который использую для загрузки файлов в моем мультимедийном расширении Commedia для CMS Joomla. Исправил в двух местах $ на jQuery, но вот с одной ошибкой я провозился часа полтора.

Речь об ошибке

"this.cancelUpload is not a function"

в строке 937:

this.cancelUpload(file.id);

Кусок кода выглядит так:

$.ajax({
                    type    : 'POST',
                    async   : false,
                    url     : settings.checkExisting,
                    data    : {filename: file.name},
                    success : function(data) {
                        if (data == 1) {
                            var overwrite = confirm('A file with the name "' + file.name + '" already exists on the server.\nWould you like to replace the existing file?');
                            if (!overwrite) {
                                this.cancelUpload(file.id);
                                $('#' + file.id).remove();
                                if (this.queueData.uploadQueue.length > 0 && this.queueData.queueLength > 0) {
                                    if (this.queueData.uploadQueue[0] == '*') {
                                        this.startUpload();
                                    } else {
                                        this.startUpload(this.queueData.uploadQueue.shift());
                                    }
                                }
                            }
                        }
                    }
                });

Оказалось, что скрипт не видит this внутри ajax запроса. Точнее он его переопределяет. Чтобы скрипт этого не делал, нужно использовать опцию contex, то есть код должен выглядеть так:

$.ajax({
                    context: this,
                    type    : 'POST',
                    async   : false,
                    url     : settings.checkExisting,
                    data    : {filename: file.name},
                    success : function(data) {
                        if (data == 1) {
                            var overwrite = confirm('A file with the name "' + file.name + '" already exists on the server.\nWould you like to replace the existing file?');
                            if (!overwrite) {
                                this.cancelUpload(file.id);
                                $('#' + file.id).remove();
                                if (this.queueData.uploadQueue.length > 0 && this.queueData.queueLength > 0) {
                                    if (this.queueData.uploadQueue[0] == '*') {
                                        this.startUpload();
                                    } else {
                                        this.startUpload(this.queueData.uploadQueue.shift());
                                    }
                                }
                            }
                        }
                    }
                });

Add comment


Security code
Refresh