scalajs-react:Ajax GET 与 DELETE 的意外差异
Posted
技术标签:
【中文标题】scalajs-react:Ajax GET 与 DELETE 的意外差异【英文标题】:scalajs-react : Unexpected difference in Ajax GET vs DELETE 【发布时间】:2021-11-29 10:55:45 【问题描述】:我在 scalajs-react 中有以下用于 GET 和 DELETE 用例的 Ajax 代码。
删除:
val ajax = Ajax("DELETE", "http://localhost:8081/delete/"+id)
.setRequestContentTypeJsonUtf8
.send("")
.onComplete xhr =>
xhr.status match
case 200 =>
println("Success")
....more code
)
case _ =>
println("Status is"+xhr.status)
Callback.log(xhr.responseText)
ajax.asCallback
...获取:
val ajax = Ajax("GET", "http://localhost:8081/fetch/"+id)
.setRequestContentTypeJson
.send("")
.onComplete xhr =>
xhr.status match
case 200 =>
println("Success")
....more code
case _ =>
println("Status is"+xhr.status)
Callback.log(xhr.responseText)
ajax.asCallback
虽然 GET 在请求完成时调用 onComplete 中的代码按预期工作,但对于 DELETE,情况并非如此。对于 DELETE onComplete 代码永远不会在请求完成时调用,即使在服务器端删除操作成功。
为什么会有这种行为差异?
【问题讨论】:
【参考方案1】:ajax.asCallback
的类型为Callback
,应通过调用.runNow()
来执行。我相信,您的 GET
查询工作正常,因为您在代码中的某处为它执行此 .runNow()
,但您不为您的 DELETE
查询执行此操作。
您的两个示例都可以正常工作:
https://scastie.scala-lang.org/mikla/GEcLg2OJSLWhjbcagaxZ9g/10(检查浏览器控制台输出)
【讨论】:
以上是关于scalajs-react:Ajax GET 与 DELETE 的意外差异的主要内容,如果未能解决你的问题,请参考以下文章
Scalajs-react:未捕获的 TypeError:无法读取 null 的属性(读取“值”)