我正在使用 remotipart 在我的 rails 应用程序中上传带有 ajax 的文件。我正在使用 jquery-ujs Ajax“全局”事件ajax:success
并ajax:error
在我的 javascript 中触发成功或失败的代码。问题是错误回调总是触发并且永远不会成功。
我可以在开发人员工具网络选项卡中看到该请求正在返回 200 OK 状态。
这是我触发远程上传的表单。
= form_tag({ action: 'import' }, html: { multipart: true }, class: 'csv_import_form', remote: true, data: { type: :json }) do
我的控制器将请求处理为 json 并呈现 json 响应:
def import
render json: { some: 'sample json' }
end
这就是在开发人员工具中看到的响应主体的样子:
<textarea data-type="application/json" data-status="200" data-statusText="OK">{"some":"sample json"}</textarea>
Remotipart 将响应包装在文本区域中。请注意,它确实包括data-status="200"
这是javascript:
$(function() {
$(document).on("ajax:success", ".csv_import_form", function(event, data, status, xhr) {
// does not get here
}).on("ajax:error", ".csv_import_form", function(event, xhr, status, error) {
console.log("status code: " + xhr.status);
console.log("json: " + xhr.responseText);
console.log("status text: " + xhr.statusText);
console.log("status: " + status);
console.log("error: " + error);
});
});
这是我在控制台中看到的输出:
status code: NaN
json: {"some":"sample json"}
status text: OK
status: OK
error: OK
似乎没有正确解析实际的 Textarea 响应。即使它具有 data-status="200",它也被解析为 NaN 并因此调用错误回调。
有人见过这个吗?
使用:
rails 4.0.13
remotipart 1.2.1
jquery 1.7.2
谢谢