将数据从ajax发送到控制器操作

时间:2017-03-15 10:51:33

标签: javascript php ajax yii2

我创建了一个使用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()获取它们。但现在我没有模特和其他。

3 个答案:

答案 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}},否则,吐出错误。