0

我想用 Scalajs-react 和 Ajax 发送一个文件。发送部分很容易使用myAjax.send(requestBody: js.Any)方法中的onSubmit方法form(我注意用 来停止事件传播preventDefault)。要构建我使用的请求正文FormData(event.target)

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

__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]

注意:当我手动append将项目添加到 中FormData时,正文中存在请求。

我究竟做错了什么?

4

1 回答 1

0

不知道为什么new FormData(formElement)不工作,但手动构建 FormData 工作。前任:

send{
  val fd = new FormData()
  val elem = dom.document
                .getElementById("form-inputf")
                .asInstanceOf[HTMLInputElement]
  fd.append("file", elem.files(0))
  fd
}

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

send{
val elem = dom.document
                .getElementById("form-inputf")
                .asInstanceOf[HTMLInputElement]
elem.files(0)
}
于 2021-06-10T09:32:43.010 回答