【问题标题】:Using cljs-ajax to send an array as param in a GET call to a ring backend使用 cljs-ajax 在 GET 调用中将数组作为参数发送到环后端
【发布时间】:2015-11-12 14:19:39
【问题描述】:

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

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

cljs-ajax 像这样对数组进行编码:

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

ring 期望数组编码如下:

?array=one&array=two

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

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

谢谢

【问题讨论】:

    标签: clojure clojurescript ring


    【解决方案1】:

    限制不在于 ring 或 cljs-ajax。这是http协议的一个限制。在 GET 请求中,参数只是 ?name=val&name=val,没有机制告诉另一端的服务器参数表示数据数组 - 即区分规范名称/值对和名称值应该被解释为数组的对。

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

    最简单的做法是将您的调用转换为帖子,而不是获取和使用 json。

    【讨论】:

    • 我明白了,这很有意义。尽管他们都提供了这样做的方法,但标准不同,这仍然很奇怪。
    • 我认为问题在于实际上没有任何“标准”可以在 GET 请求中传递数据数组。 clj-ajax 库至少为处理数组提供了一些解释,即将“键”转换为使用数组元素编号生成唯一值的字符串,即“array[0]”。问题是因为没有标准,环中间件无法知道某些lib会使用什么解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    相关资源
    最近更新 更多