我想用Scalajs-react和Ajax发送一个文件。使用我的form的onSubmit方法中的Ajax.send(requestBody: js.Any)方法,发送部分很容易(我小心地用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时,主体请求中存在。
我做错了什么?
发布于 2021-06-10 17:32:43
不确定为什么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)
}https://stackoverflow.com/questions/67902283
复制相似问题