【问题标题】:Sending data from ajax to controller action将数据从 ajax 发送到控制器动作
【发布时间】:2017-03-15 10:51:32
【问题描述】:

我创建了 ajax 请求,我在其中使用 FormData 添加了图像。 它的样子:

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 从表单模型保存到图像模型,将图像附加到邮件等)。我该如何解决?我知道当表单向一个操作发送请求时如何获取图像,我当然可以从带有模型和模型属性的 UploadedFile::getInstances() 中获取它们。但现在我还没有模型和其他。

【问题讨论】:

    标签: javascript php ajax yii2


    【解决方案1】:

    试试这个

    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]);
                }
            }
    

    【讨论】:

    • 这是什么?我不需要重构我的 js 代码,它工作得很好,我只需要将一个变量从一次操作放到另一个操作
    【解决方案2】:

    我不确定我的概念是不是你的意思.. 但我认为您应该首先将操作站点/图像中的图像保存到图像模型中,并使用特殊字段-临时 ID 保存,这对于两者都是相同的动作和模型(表单模型和图像模型)。呈现表单时应生成临时 ID。然后在成功保存图像然后成功保存表单模型后,您应该将图像模型中的临时 ID 替换为与已保存表单模型相关的正确 ID。如果表单模型无效且无法保存,则应删除具有 tmp ID 的图像模型并重复整个过程。

    【讨论】:

      【解决方案3】:

      在构造 AJAX 请求时尝试将 multipart/form-data 作为内容类型。

      你问的有点不对,AJAX调用是非阻塞的,可以同时发送,但是不知道服务器上哪个会更快,如果你的site/form依赖site/image,然后先向site/image提交数据,应用自定义逻辑(图片上传到服务器等)并执行成功后,在success上提交用于服务site/form的数据,否则,吐个错误。

      【讨论】:

        猜你喜欢
        • 2019-07-02
        • 1970-01-01
        • 2017-03-11
        • 1970-01-01
        • 1970-01-01
        • 2017-02-01
        • 2023-03-26
        • 2013-05-03
        • 2019-08-28
        相关资源
        最近更新 更多