虽然在技术上允许为请求提供请求主体(和相应的Content-Type
标头,如application/x-www-form-urlencoded
)GET
,但几乎所有服务器都假定GET
不包含请求主体。相反,在需要正文时使用POST
(创建文档)或(更新文档)。PUT
但是,如果您要求的只是常规的旧查询参数,那是很正常的,但是 RxJS 中没有内置支持将对象转换为查询字符串——主要是因为没有关于复杂对象的官方规范/arrays 应该被序列化,所以一旦你做的不仅仅是简单的 key -> value,每个服务器都会有显着的差异。
相反,您只需将它们包含在 URL 中。我意识到您说“不构建 url”,但缺乏规范意味着 RxJS 可能永远不会添加支持,因为它非常固执己见。您可以自己手动生成字符串,也可以使用具有您喜欢的约定的第三方实用程序。
ajax.get(`/search?query=${query}&something=${something`)
// or using something like https://www.npmjs.com/package/query-string
ajax.get(`/search?${queryString.stringify(params)}`)
如果您有兴趣进一步了解查询参数的自以为是的性质,请考虑如何序列化{ foo: [{ bar: 1 }, { bar: 2 }] }
. 有人可能会说应该是?foo[0][bar]=1&foo[1][bar]=2
,但我也看到了?foo[][bar]=1&foo[][bar]=2
,?foo[bar]=1&foo[bar]=2
和其他变体。处理重复项时,事情变得更加棘手。?foo=true&foo=false
应该foo
是真的还是假的?(这是一个意见嘿嘿)