是否可以将列表参数从浏览器传递到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 ...?
请有人为我确认一下吗?
答案 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[]")