我一直在寻找解决方案,为期两周。我有一个我自己构建的自定义表单非常独特。我需要能够将表单数据与包含的一个或多个文件一起上传。 一个是后端,我们在铁轨上运行红宝石。为了使其被接受,数据需要被格式化为特定的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对象中。 感谢
答案 0 :(得分:0)
我发现最好的选择是使用jquery表单插件。 http://malsup.com/jquery/form/ 这个链接是一个救生员。它会检测天气是否应该使用iframe进行上传过程并相应地处理。很棒的应用。