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

时间:2013-06-29 13:00:38

标签: haskell haskell-snap-framework

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

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

("/objects/:id", method DELETE deleteObject)

只是因为可能会有太多而一个一个地删除100行会让人觉得有点单调乏味。

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

更新

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

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

- Snaps的“getParams”功能仅支持旧式多参数URL:

"a=1&a=2&a=3&a=4"

而不是新的:

"a[]=1&a[]=2&a[]=3&a[]=4"

这使得无法传递复杂参数。

- 路线应为:

("/objects/", method DELETE deleteObject)

而不是:

("/objects/:ids", method DELETE deleteObject)

我没有回答我的问题,因为我不相信这是通过快照传递多个参数网址的唯一方法。

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

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

请有人为我确认一下吗?

1 个答案:

答案 0 :(得分: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>

...像这样提交。

http://localhost:8000/foo?a=2&a=3&a=5&submit=Submit

然后,在你的处理程序中,这将为你提供一个ByteStrings列表。

fooHandler = do
    as <- getsRequest (rqParam "a")

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

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

...然后你必须调整括号

rs <- getsRequest (rqParam "rows[]")
cs <- getsRequest (rqParam "cols[]")