0

我一直在寻找,但我找不到答案,我的猜测是我的问题没有很好地定义,所以我希望得到一些指导

我正在使用 turbogears2.2 我通过 $.post() 从客户端视图发送一个 JavaScript 对象,在服务器上我收到这个对象(作为 kw):

{'phones[1][surname]': u'sym', 'phones[2][name]': u'', 'phones[1][phone]': u'5498498', 'phones[0][phone]': u'0564', 'phones[1][name]': u'jhon', 'phones[0][surname]': u'cat', 'phones[2][phone]': u'', 'phones[0][name]': u'bob'}

我正在从具有 3 列的表中发送数据

在我的服务器上,我试图分离每一行的数据,但我在这里有点迷失了。如何将该字典拆分为不同的数据行?

正在做

import json
json.loads(str(kw))

失败

{ValueError}: Expecting property name: line 1 column 2 (char 1)

如何将该字典/对象转换为嵌套字典(或其他东西)?谢谢

4

2 回答 2

0

要发布JSON,请不要使用$.post(). 改为使用$.ajax(),并明确设置内容类型:

$.ajax({
    url: URL,
    type: "POST",
    data: JSON.stringify({phone: tableData.getData()}),
    contentType: 'application/json; charset=utf-8'
    dataType: 'json',
    success: function(data) {
        console.log(response);
    },
});

如果您有一个直接处理 JSON 的控制器,例如TurboGears Web Services提供的控制器,这将特别有帮助。

于 2014-05-30T16:16:11.377 回答
0

感谢Martijn Pieters的帮助,我以为我在发布 JSON,但我没有。

您没有发布 JSON;您发布了 jQuery 为 PHP 数组功能格式化的 application/x-www-form-urlencoded 数据。——马丁·彼得斯

这是我的 JavaScript,我正在尝试HandsOnTable(jQuery 数据网格编辑器)

$("#sendToServer").click(function(){
        var tableData = $("#myTable").data('handsontable');
        $.post(
            URL,
            {phones:tableData.getData()},
            function(data){
                console.log(data)
            }
        )
    })

那不是 JSON,尽管我认为它是

无论如何,简单的修复:

客户端(JavaScript):

var tableData = $("#myTable").data('handsontable');
var jsonData = JSON.stringify(tableData.getData())
...
$.post(URL,
     {phones:jsonData},
...
)

现在在服务器端(Python):

import json
def getPhones(self,**kw):
        phones = json.loads(kw['phones'])
        ...

而且我将数据作为行的字典,太好了

谢谢指导

于 2014-05-30T15:46:30.307 回答