使用 cljs-ajax 在 GET 调用中将数组作为参数发送到环后端

Using cljs-ajax to send an array as param in a GET call to a ring backend

我正在使用 cljs-ajax 对环后端进行 GET 调用。

问题是我也需要传递一个数组。

cljs-ajax 像这样编码数组:

?array[0]=one&array[1]=two

ring 期望数组像这样编码:

?array=one&array=two

所以使用 wrap-params 中间件我没有得到数组,只是不同的键值对 ({array[0] "one" array[1] "two})。

有没有办法解决这个问题,还是我必须在服务器端手动解析参数?

谢谢

ring 或 cljs-ajax 没有限制。这是http协议的限制。在 GET 请求中,参数只是 ?name=val&name=val,没有机制告诉另一端的服务器参数代表一个数据数组——也就是说,区分 norm name/value 对和应解释为数组的名称值对。

因此,您需要在您的处理程序中手动将您的环中间件生成的地图转换为数组。您可以使用启发式方法来实现中间件,它在参数名称中查找具有特定 'pattern' 的 get 参数,例如 #"array[\d+\]" 并将它们提取到一个数组中并插入到您的参数映射中。但是,我认为这有点麻烦,除非您需要在许多处理程序中执行此操作,否则它可能会引入比解决的问题更多的问题。

最简单的方法是将调用转换为 post 而不是获取和使用 json。