Sveltekit Actions 返回乱码 json

use*_*471 3 sveltekit

从 Sveltekit 操作返回的 json 是乱码。我期待这样的事情:

{ foo: bar, foo2: bar2 }
Run Code Online (Sandbox Code Playgroud)

但我得到的是这个:

Array({ foo: 1, foo2: 2 }, bar, bar2)
Run Code Online (Sandbox Code Playgroud)

对于嵌套数据来说,这更令人烦恼。

这就是我发送的方式:

const response = await fetch('/api/fetch', {
  method: 'POST'
}).then((res) => {
  res.json().then((r) => {
    console.log(JSON.parse(r.data))
  })
})
Run Code Online (Sandbox Code Playgroud)

这是api/fetch/+page.server.js

export const actions = {
  default: async ({ request }) => {
    const response = await fetch(
      'https://exterual-url-that-returns-json', {
        method: 'GET'
      }
    )
    return await response.json()
  }
}
Run Code Online (Sandbox Code Playgroud)

即使 json 对象不是从外部 url 获取的,我也有同样的问题,即return { foo: bar, foo2: bar2 }

H.B*_*.B. 6

JSON 不是乱码,而是序列化的,devalue它比普通的限制更少JSON.stringify,例如它保留了Date,SetMap对象。

JSON 应该由 SvelteKit 代码使用,它应该自动正确转换它。操作应该与<form>元素一起使用,并将结果传递到属性中的页面form;要异步处理请求,请使用enhance操作。

如果由于某种原因您必须手动处理数据,请使用 deserializefrom $app/forms