首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用scalajs-react和AJAX上传文件

如何使用scalajs-react和AJAX上传文件
EN

Stack Overflow用户
提问于 2021-06-09 18:26:33
回答 1查看 30关注 0票数 0

我想用Scalajs-react和Ajax发送一个文件。使用我的formonSubmit方法中的Ajax.send(requestBody: js.Any)方法,发送部分很容易(我小心地用preventDefault停止了事件传播)。为了构建请求主体,我使用了FormData(event.target)

代码语言:javascript
复制
def f(e: ReactFormEvent) = {
          Ajax
            .post("http://localhost:9000/rpc/v1/test/update-dataset")
            .setRequestHeader("X-Requested-With", "XMLHttpRequest")
            .send({
              new FormData(
                e.target
                  .asInstanceOf[dom.raw.HTMLFormElement]
              )
            })
            .validateStatusIs(200)(Callback.throwException)
            .asCallback
        }
Form(onSubmit = e => f(e) >> e.preventDefaultCB)(
          FormGroup("groupInput")(
            FormFile(label = "Input")(),
            UncontrolledFormControl(ref = ref, defaultValue = "abc")()
          ),
          Button(`type` = "submit")("Submit")
        )

看起来不错,但是由于某种原因,请求主体不包含任何内容(例如:------WebKitFormBoundaryAnYzDUdxWxA8hrJR--),就好像FormData无法从表单中检索数据一样。下面是e.target的两个子节点的打印输出,其中我们可以看到两个输入都有一个非空的value

代码语言:javascript
复制
__reactFiber$ipxb5pt9wbi,[object Object],__reactProps$ipxb5pt9wbi,[object Object],_wrapperState,[object Object],__reactEvents$ipxb5pt9wbi,[object Set],value,C:\fakepath\artifacts.zip,_valueTracker,[object Object]
__reactFiber$ipxb5pt9wbi,[object Object],__reactProps$ipxb5pt9wbi,[object Object],_wrapperState,[object Object],__reactEvents$ipxb5pt9wbi,[object Set],value,abc,_valueTracker,[object Object]

注意:当我手动将项目appendFormData时,主体请求中存在。

我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2021-06-10 17:32:43

不确定为什么new FormData(formElement)不能工作,但手动构建FormData可以工作。例如:

代码语言:javascript
复制
send{
  val fd = new FormData()
  val elem = dom.document
                .getElementById("form-inputf")
                .asInstanceOf[HTMLInputElement]
  fd.append("file", elem.files(0))
  fd
}

如果只需要发送一个文件,则根本不需要使用FormData。仅仅依靠File API就足够了。例如:

代码语言:javascript
复制
send{
val elem = dom.document
                .getElementById("form-inputf")
                .asInstanceOf[HTMLInputElement]
elem.files(0)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67902283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档