将dict传递给控制器

时间:2014-12-21 17:10:35

标签: python ajax dictionary web2py

我写这篇文章是为了得到一些帮助“脱口而出”。我无法弄清楚如何将dict作为参数传递给web2py中的控制器。

目标:我需要将html5 sessionStorage传递给web2py控制器以验证它并使用它来生成订单购物车。

这就是我所拥有的:我有一个页面是产品目录。我使用html5 sessionStorage来收集订单。我看起来像这样:

{id:qty} e.g. {"1":"32", "15":"50"}

然后我有以下

 jQuery('#cart').click(
        function() {
            alert("sending cart to server via ajax");
            var order = JSON.stringify(sessionStorage);
            console.log(order);

            jQuery.ajax({
                type: 'POST',
                url: '/app/default/generateCart',
                contentType: "application/json; charset=utf=8",
                data: order,
                dataType: 'json',
                success: function(data) {alert('sent to server');}
            });
        });

这正确地将数据发送到我使用request.vars

的服务器

所以问题是:如何将这个类似dict的结构传递给控制器​​?我可以使用JS生成链接并在其中放入一个完整的词典,但这似乎不安全,看起来像是不好的做法。

我确实读过这本书,但我提前道歉:我对这个问题有一点心理障碍,除了我做的事情之外我看不到,这是: (1) - 我将ajax发送到上面的控制器:generateCart() - generateCart()将request.args保存到session.order中,cart()控制器尝试从中检索。在cart()session.order为空。我可能不完全理解会话是如何工作的。 (2) - 我尝试将ajax制作到相同的控制器购物车(),但这也不起作用 - 它是空的

我很感激在这里练习的屁股,以及我错过的书籍参考。但关键qn是:如何将dict传递给控制器​​?

PS:是的,我是软件设计和网站开发的新手。我试图关注文档,但我想我陷入了困境(可以这么说)。谢谢。

1 个答案:

答案 0 :(得分:0)

这个问题的快速回答是:ajax是正确的方法。我做得不对。这是更正后的代码:

// ajax request to server
function sendRequest() {
    var order = JSON.stringify(sessionStorage);
    console.log(order);

    jQuery.ajax({
        type: 'POST',
        url: '/app/default/generateCart',
        contentType: 'application/json; charset=utf-8',
        data: order,
        dataType: 'text',
        success: function (data) {
            console.log('callback success');
        },
        error: function() {
            console.log('callback failed');
        }
    });
}

我从中学到的一件事是,即使数据已成功到达服务器,回调也可能失败。原因是dataType。我最初将dataType指定为JSON,这是回调所期望的。但是web2py现在使用JSON发送回调,但文本。因为那不是JS所期望的,它失败了。我认为它带有200以外的代码,但我不能相信这一点。所以,我认为您需要知道回调数据类型是什么。

因此,看起来生成JSON并通过IS发送它实际上是将复杂数据发送到服务器的最佳(或最简单)方式。虽然很明显,它需要对一个菜鸟进行一些阅读和测试。

这篇SO帖子也大量帮助:How do I return the response from an asynchronous call?。感谢Felix Kling的精彩总结。