我通过ajax将一个浮点值的二维数组传递给我的views.py.我的ajax调用看起来像这样:
$.ajax({
method: "POST",
url: "introURL",
data: {
csrfmiddlewaretoken: document.getElementsByName('csrfmiddlewaretoken')[0].value,
dsg_mtx : JSON.stringify(dsg_mtx),
},
success: function(data) {
document.getElementById("test").innerHTML = data; // echo response
},
error: function() {
alert ("Something went wrong");
}
我通过此次调用将数据提取到视图中:
def introURL(request):
if request.is_ajax():
try:
designMtx = json.loads(request.POST['dsg_mtx'], parse_float=None)
except KeyError:
return HttpResponse('Error, intro import')
... Some transformation of designMtx...
return HttpResponse(response)
else:
raise Http404
所以我的问题是如何将这个json stringify' d对象转换回我可以用来计算响应的二维数组?正如您所看到的,我尝试使用parse_float选项,但它仍然是str数据类型。
传递的数组dsg_mtx是使用Handson表创建的,如下所示:
-1 -1
-1 1
1 -1
1 1
感谢您的指导。
答案 0 :(得分:1)
我的问题原来是handsontable的默认设置。当我为表提供浮点值时,默认情况下,表将它们转换为字符串。所以我发布了一个看起来像浮点数的字符串矩阵。修复只是重新格式化放置数据的双手单元格。
var data = function () {
return Handsontable.helper.createSpreadsheetData(mtxrows, mtxcols);
};
var hot = new Handsontable(container, {
data: data,
height: 480,
colHeaders: true,
rowHeaders: true,
stretchH: 'none',
columnSorting: true,
contextMenu: true,
className: "htCenter",
cells: function (row, col, prop) {
var cellProperties = {};
if (row > 0) {
cellProperties.type = 'numeric';
cellProperties.format = '0[.]000';
}
return cellProperties;
},
afterChange: function () {
var tmpData = JSON.parse(JSON.stringify(mtx_data));
}
});
所以基本上第一行之后的任何东西都设置为数字类型。
所以现在我的ajax调用中的这一行:
dsg_mtx : JSON.stringify(dsg_mtx),
正确格式化,并且views.py使用此调用正确加载它:
designMtx = json.loads(request.POST['dsg_mtx'])
感谢Tomasz Jakub建议使用console.log()帮助我诊断问题。
此致 海梅
答案 1 :(得分:0)
尝试json.loads
但在parse_float
传递decimal.Decimal
designMtx = json.loads(request.POST['dsg_mtx'], parse_float=decimal.Decimal)