将列表作为多个参数URL传递给快照

r.s*_*cky 6 haskell haskell-snap-framework

是否可以将列表参数从浏览器传递到Snap中的处理函数?如何从列表构造多参数URL并将其发送到处理函数?

例如,我需要删除一些表行或任何其他对象.我不能用通常的REST路由做到这一点:

("/objects/:id", method DELETE deleteObject)
Run Code Online (Sandbox Code Playgroud)

仅仅因为可能会有太多并且逐个删除100行可能会有点单调乏味.

我通过复选框输入选择了注定的对象,比如需要删除[3,4,6,8]行.那么如何将该列表传递给URL中的处理程序以及该操作的路由是什么样的呢?

UPDATE

好吧,我终于用jquery和ajax调用了.Snap的"getParams"函数可以处理多个参数URL,但我仍然无法弄清楚如何在没有jquery和ajax的情况下实际构建URL.

我使用javascript来收集要删除的项目并构建项目数组.然后我使用ajax构造多个参数URL并将其发送给处理程序.使用此方法和Snap几乎没有注意事项:

- Snaps的"getParams"函数仅支持旧式多参数URL:

"a=1&a=2&a=3&a=4"
Run Code Online (Sandbox Code Playgroud)

而不是新的:

"a[]=1&a[]=2&a[]=3&a[]=4"
Run Code Online (Sandbox Code Playgroud)

这使得传递复杂参数变得不可能

- 路线应该是:

("/objects/", method DELETE deleteObject)
Run Code Online (Sandbox Code Playgroud)

而不是:

("/objects/:ids", method DELETE deleteObject)
Run Code Online (Sandbox Code Playgroud)

我没有回答我的问题,因为我不相信这是通过snap传递多个参数URL的唯一方法.

虽然"getParams"可以处理它,但我的问题仍然存在:我如何构建URL并将其发送给处理程序?

例如,Rails在视图逻辑中使用"link_to"函数来构造URL.Snap不使用模板内部的任何逻辑,那么它是如何工作的呢?它只是不能在snap中传递多个参数URL的唯一方法是借助javascript ...?

请有人为我确认一下吗?

mig*_*yte 4

你已经差不多了。下面的表格...

<form action="/foo">
  <ul>
    <li>Row 1: <input type="checkbox" name="a" value="1"/></li>
    <li>Row 2: <input type="checkbox" name="a" value="2"/></li>
    <li>Row 3: <input type="checkbox" name="a" value="3"/></li>
    <li>Row 4: <input type="checkbox" name="a" value="4"/></li>
    <li>Row 5: <input type="checkbox" name="a" value="5"/></li>
  </ul>
  <input type="submit" name="submit" value="Submit"/>
</form>
Run Code Online (Sandbox Code Playgroud)

...像这样提交。

http://localhost:8000/foo?a=2&a=3&a=5&submit=Submit
Run Code Online (Sandbox Code Playgroud)

然后,在您的处理程序中,这将为您提供一个字节字符串列表。

fooHandler = do
    as <- getsRequest (rqParam "a")
Run Code Online (Sandbox Code Playgroud)

所以这根本不需要 JavaScript。但它也适用于 JavaScript。如果您使用 jQuery 提交这样的列表...

var fieldData = { rows: [0,1,4], cols: [2,3,5] };
$.getJSON('http://localhost:8000/foo', fieldData, ...);
Run Code Online (Sandbox Code Playgroud)

...然后你必须对括号进行调整

rs <- getsRequest (rqParam "rows[]")
cs <- getsRequest (rqParam "cols[]")
Run Code Online (Sandbox Code Playgroud)