【问题标题】:Passing list as multiple parameter URL in snap在 snap 中将列表作为多个参数 URL 传递
【发布时间】:2013-06-27 03:47:10
【问题描述】:

是否可以将列表参数从浏览器传递到 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)

我没有回答我的问题,因为我不认为这是使用 snap 传递多个参数 URL 的唯一方法。

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

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

请有人帮我确认一下?

【问题讨论】:

    标签: haskell haskell-snap-framework


    【解决方案1】:

    你几乎在那里。下面的表格...

    <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
    

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

    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[]")
    

    【讨论】:

    • 谢谢。您通常是 snap 的救命稻草。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-16
    • 2020-08-03
    • 2013-11-13
    相关资源
    最近更新 更多