首页 > 解决方案 > scalajs-react:Ajax GET 与 DELETE 的意外差异

问题描述

我在 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 代码永远不会在请求完成时调用,即使在服务器端删除操作成功。

为什么会有这种行为差异?

标签: reactjsscalascala.jsscalajs-react

解决方案


ajax.asCallback具有Callback应该通过调用来执行的类型.runNow()。我相信,您的GET查询工作正常,因为您在代码中的某个地方.runNow()为它执行此操作,但您不是为您的DELETE查询执行此操作。

这是您的两个示例都可以正常工作:

https://scastie.scala-lang.org/mikla/GEcLg2OJSLWhjbcagaxZ9g/10(检查浏览器控制台输出)


推荐阅读