通过ajax上传文件以及其余的表单数据

时间:2014-01-16 03:30:53

标签: javascript jquery ruby-on-rails ajax file-upload

我一直在寻找解决方案,为期两周。我有一个我自己构建的自定义表单非常独特。我需要能够将表​​单数据与包含的一个或多个文件一起上传。 一个是后端,我们在铁轨上运行红宝石。为了使其被接受,数据需要被格式化为特定的json对象。这是我的脚本,目前仅用于表单数据...而不是文件

$("#submit").click(function(e) {  
e.preventDefault();
files;
var data = new FormData();
$.each(files, function(key, value)
{
    data.append(key, value);
});

var uploadJsonObject = { 
  post: {
             title: $("#project-title-inputfield").val(),
             post_type: "",
             //contents_attributes: _.map(files, function(file) { return { piece: file } }),    
             comments_attributes: [{
               body: $("#post_comments_attributes_body").val()
             }]
    }
}


console.log(uploadJsonObject);
    // Using the core $.ajax() method
$.ajax({
  url: "/posts",
  data:  uploadJsonObject,
  type: "POST",
  dataType : "json",
  success: function( json, uploadJsonObject ) {
      alert("worked")
  },
  error: function( xhr, status ) {
      alert( "Sorry, there was a problem!" );
      console.log("status" + status);
  }
});  




});   

您会注意到该行

contents_attributes:_. map(files,function(file){return {piece:file}}),

被注释掉了。这就是文件需要在对象中格式化的方式。问题是jquery ajax不支持文件。当我取消注释该行以尝试包含文件时,我得到400(错误)。我试图使用formData和XMLHttpRequest()的不同变体来修改它,但我还没有找到任何解决方案。修改文件并允许我将其包含在该json对象中。 感谢

1 个答案:

答案 0 :(得分:0)

我发现最好的选择是使用jquery表单插件。 http://malsup.com/jquery/form/ 这个链接是一个救生员。它会检测天气是否应该使用iframe进行上传过程并相应地处理。很棒的应用。