我创建了一个使用FormData添加图像的ajax请求。 它的样子:
function handleForm(e) {
var data = new FormData();
for(var i=0, len=storedFiles.length; i<len; i++) {
data.append('files['+i+']', storedFiles[i]);
}
$.ajax({
url:'site/images',
type:'POST',
processData: false,
contentType:false,
data:data,
success: function (response) {
console.log(response);
}
})
}
和处理时间
$("#myForm").on("submit", handleForm);
myForm是我所有表单的id。此表单转到操作 site / form 但是对于ajax请求,我创建了 site / image 操作,我可以在其中获取图像。我希望在表单发送时发送它们。 但问题是当我试图将我的图像放到网站/表单操作时,我需要把它放在那里因为网站/表单处理不同的逻辑(将form_id从Form模型保存到Images模型,将图像附加到邮件等) )。我该如何解决?我知道当表单向一个动作发送请求时如何获取图像,我当然可以通过模型和模型属性从UploadedFile :: getInstances()获取它们。但现在我没有模特和其他。
答案 0 :(得分:0)
试试这个
var storedFiles= $("#upload");
if (storedFiles.get(0) != undefined) {
for (i = 0; i < storedFiles.get(0).files.length; i++) {
data.append("files['+i+']", storedFiles.get(0).files[i]);
}
}
答案 1 :(得分:0)
我不确定我的概念是什么意思..但我认为你应该首先将动作站点/图像中的图像保存到图像模型中并保存特殊字段 - 临时ID,这两者都是相同的动作和模型(表单模型和图像模型)。呈现表单时应生成临时ID。然后在成功保存图像然后成功保存表单模型之后,您应该将图像模型中的临时ID替换为与保存的表单模型相关的正确ID。如果表单模型无效且无法保存,则应删除带有tmp ID的图像模型并重复整个过程。
答案 2 :(得分:0)
在构造AJAX请求时尝试site/form
作为内容类型。
你要求的是有点不对,AJAX调用是非阻塞的,你可以同时发送它们,但你不知道哪一个会在服务器上变得更快,如果你的{{1依赖于site/image
,然后在应用自定义逻辑(在服务器上上传图像等)并且执行成功后,首先将数据提交到site/image
,提交要提供的数据{在site/form
上{1}},否则,吐出错误。