字符串数据转换为数组问题

时间:2015-10-28 07:02:49

标签: javascript jquery angularjs

我正在使用https://github.com/ManifestWebDesign/angular-gridster。以下是默认图表大小的代码: -

$scope.dashboards = {
  '1': {
    widgets: [{
      row: 0,
      col: 0,
      sizeX: 2,
      sizeY: 1,
      name: "Chart1",
      canvas: "canvas1"
    }, {
      row: 0,
      col: 2,
      sizeX: 2,
      sizeY: 1,
      name: "Chart2",
      canvas: "canvas2"
    }]
  }
};

我想将此默认尺寸存储在数据库和数据库中。在负载和电话上调用它将其应用于$scope.dashboards

所以我将数据存储在数据库列中,如下所示: -

[{row: 0,col: 0,sizeX: 2,sizeY: 1,name: "Chart1",canvas: "canvas1"}, {row: 0,col: 2,sizeX: 2,sizeY: 1,name: "Chart2",canvas: "canvas2"}]

在ajax电话之后: -

jq.ajax({
    type: "GET",
    url: "/Method/",
    success: function(data) {

        var arr = JSON.parse(data);

        $scope.dashboards = {
            '1': {
                widgets: arr
            }
        };
    }
});

给我错误: -

SyntaxError: Unexpected token r
    at Object.parse (native)

2 个答案:

答案 0 :(得分:1)

JSON.parse()在语法上非常严格,作为对象的一对,它应该是

的字符串:值 所以"第一"和"第二"应该是字符串作为json。将您的json更改为以下代码,它应该是正确的

'[{"row": "0","col": "0","sizeX": "2","sizeY": "1","name": "Chart1","canvas": "canvas1"},
  {"row": 0,"col": 2,"sizeX": 2,"sizeY": 1,"name": "Chart2","canvas": "canvas2"}]

它会起作用

之前已经回答了这个问题

或添加

数据类型:" JSON"你的功能  如果你不需要解析这个对象

jq.ajax({
    type: "GET",
    url: "/Method/",
    dataType:"json",
    success: function(data) {

        var arr = data;

        $scope.dashboards = {
            '1': {
                widgets: arr
            }
        };
    }
});

答案 1 :(得分:0)

似乎ajax智能猜测已经将数据视为json并将其转换为对象,因此您不必再次解析它。这句话:var arr = JSON.parse(data);是多余的。尝试:

jq.ajax({
    type: "GET",
    url: "/Method/",
    success: function (data) {        
        $scope.dashboards = {
            '1': {
                widgets: data
             }
        };
    }
});