【发布时间】:2016-10-05 12:30:00
【问题描述】:
我有以下 JS 从 Rails 应用程序中的控制器方法检索一些 JSON 数据:
$.ajax({
xhr: function() {
var xhr = $.ajaxSettings.xhr();
xhr.onprogress = function(e) {
if (e.lengthComputable) {
console.log(e.loaded / e.total);
}
};
xhr.upload.onprogress = function(e) {
if (e.lengthComputable) {
console.log(e.loaded / e.total);
}
};
return xhr;
},
cache: false,
url: '/get_data',
method: 'GET',
dataType: 'JSON',
success: function(data) {
console.log(data);
}
});
方法如下:
def get_data
@data = [{....}]
respond_to do |format|
format.html
format.json do
response.headers['Content-Length'] = @data.to_s.length.to_s
render json: @data
end
end
end
由于@data 很大或需要先进行复杂计算,因此该方法最多可能需要 3-4 秒才能返回,因此我想在 AJAX 发生时显示进度条。
注意:我不只是想显示一个加载器,显示在 AJAX 之前和之后,而是实际显示进度!
但是我发现lengthComputable 总是错误的......
如何让 Rails 发回正确的进度?我添加了 Content-Length 标头,但它从未出现在响应中...
【问题讨论】:
标签: javascript jquery ruby-on-rails json ajax