【发布时间】:2014-08-26 15:50:06
【问题描述】:
我在我的 rails 项目中使用 Turbolinks。当我单击上传按钮(ajax 调用)时,它失败并且错误部分显示 Uncaught TypeError: Cannot read property 'length' of undefined。我认为由于 turbolinks 在后台使用 ajax 导致的常规链接(无 ajax)显示了相同的问题。
我的上传页面的javascript:
<html>
..... html code ...
<%= javascript_include_tag 'js/vendor/jquery.ui.widget.js' %>
<%= javascript_include_tag "js/jquery.iframe-transport" %>
<%= javascript_include_tag "js/jquery.fileupload.js" %>
<script>
$(function () {
'use strict';
var filestoupload = 0;
$('#fileupload').fileupload({
dataType: 'json',
add: function(e, data) {
if(data.files[0]['size'] > 20000000) {
$('#errors_append').html('maximum size for file allowed is 20 mb');
} else {
data.submit();
}
},
done: function (e, data) {
$.each(data.result.files, function (index, file) {
filestoupload++;
$('').text(file.name + ' ' + 'uploaded successfully').appendTo('#files_append');
if (filestoupload > 2) {
$('#file_button').attr("disabled","disabled");
}
});
$("#btn_text").html('Add more files');
},
start: function (e, data) {
$('#progress .progress-bar').css(
'width',
0 + '%'
);
},
progressall: function (e, data) {
var progress = parseInt(data.loaded / data.total * 100, 10);
$('#progress .progress-bar').css(
'width',
progress + '%'
);
},
success: function(xhr){
$('#progress .progress-bar').attr('class', 'progress-bar progress-bar-success');
$('#errors_append').empty();
},
error: function(xhr){
var errors = $.parseJSON(xhr.responseText).error
$('#errors_append').html(errors);
$('#progress .progress-bar').attr('class', 'progress-bar progress-bar-danger');
}
}).prop('disabled', !$.support.fileInput)
.parent().addClass($.support.fileInput ? undefined : 'disabled');
});
</script>
【问题讨论】:
-
您的
js/jquery.fileupload.js文件在您的目录中的什么位置?以及你为什么在你的视图中使用 js? -
在 /app/assets/javascripts/js/jquery.fileupload.js
-
您能否发布您在开发者控制台中遇到的确切错误
-
我已经添加了截图,但我没有足够的声誉点:(,
-
不,但是当我删除 turbolinks 时,它可以正常工作,或者当我在 application.js(require) 中包含 js 时,即使使用 turbolinks 也可以正常工作。但目前我不知道究竟是为什么。
标签: jquery ruby-on-rails ajax file-upload turbolinks