【问题标题】:Vue send base64 with axios, but is nullVue用axios发送base64,但是为null
【发布时间】:2020-01-15 16:40:54
【问题描述】:

我有一个表单,我需要发送几个图像,所以我在 Base64 中转换每个图像,如下所示,该对象存在,但是当我访问 network 来自开发者工具,对象是空的!有人知道为什么会这样吗? Console.log of object

vue中的post方法

this.topografiaItems.forEach(function(topografia) {
                    topografia.anexos.forEach(function(anexo, index) {
                        let reader = new FileReader();
                        reader.readAsDataURL(anexo);
                        reader.onloadend = function () {
                            topografia.anexos[index] = reader.result;
                        };
                        reader.onerror = function () {
                          console.log('Error', error);
                        };
                    });
                });

                console.log(this.topografiaItems);
                axios.post(this.path, this.topografiaItems,{
                    headers: {
                        'Content-Type': 'multipart/form-data'
                    }
                }).then( (response) => {
                   console.log(response);
                });

【问题讨论】:

    标签: javascript vue.js post base64 axios


    【解决方案1】:

    reader.readAsDataURL(anexo); 是异步的。 forEach 循环是同步的。 axios.post 发生在实际加载数据之前。 一种解决方案是使用 promise 包装器和 for of iterator 等待

    类似https://codesandbox.io/embed/cranky-cherry-oxvhg

    【讨论】:

    • 非常感谢!首先,您的回答对以下项目有所帮助。就像你说的,Reader 类是异步的,所以我必须将我的函数包装在一个可以解决顶级问题的承诺中。另一个问题是我在循环中执行此操作,并且我无法更改值是参考,这导致我找到了一个解决方案(codepen.io/Spenttie/pen/QWLVwKK),但工作完美。如果有人有更好的实现,请分享!谢谢
    • 如果您在使用的for of 迭代器中使用let 而不是const,您应该可以进行更改。没有“最佳”解决方案。有些人喜欢突变,有些人不喜欢。对于非突变,最好从这次迭代中得到一个新数组,然后在你的 post call 中使用它
    • 再次感谢!我不注意const。完美地改变一切。笔更新
    猜你喜欢
    • 2019-04-26
    • 2020-10-16
    • 2020-06-10
    • 2018-07-19
    • 2017-09-27
    • 2020-07-08
    • 2021-10-05
    • 2019-03-01
    • 1970-01-01
    相关资源
    最近更新 更多