Remotipart文件上传,将NaN作为响应代码

时间:2015-10-21 20:07:01

标签: jquery ruby-on-rails ajax ruby-on-rails-4 remotipart

我正在使用remotipart在我的rails应用程序中上传带有ajax的文件。我在我的javascript中使用jquery-ujs Ajax“全局”事件ajax:successajax:error来触发成功或失败的代码。问题是错误回调总是触发而且永远不会成功。

我可以在开发人员工具网络选项卡中看到请求返回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

由于

1 个答案:

答案 0 :(得分:1)

事实证明,即使我已将remotipart gem升级到最新版本(此时为1.2.1),但所包含的javascript文件已过时。

修复我删除:

app/assets/javascripts/jquery.remotipart.js

app/assets/javascripts/jquery.iframe-transport.js

而是添加了

//= require jquery.remotipart

到我的application.js文件,然后按预期工作。