2014-04-28 112 views
0

我有下面的一段代码,并试图用我的web服务返回的json数据填充我的slickgrid。但网格没有被填充。 返回的数据是空的,因为我看不到任何警报窗口。下面(JSONData)我的服务调用的Jquery.getJson缺少一些东西?

$(function() 
{ 
    var slickdata = []; 
    $.getJSON("comm/j/abc?action=hi", function(data) 
    { 
     // data is a JavaScript object now. Handle it as such 
     for (var i=0;i<data.length;i++) 
     { 
      alert("slickdata i"); 

      slickdata[i] = 
      { 
       month: data[i].month, 
       teamed: data[i].teamed, 
       net: data[i].net 
      }; 
     } 
    }); 

    alert(slickdata); 

    // dataView = new Slick.Data.DataView({ inlineFilters: true }); 
    grid = new Slick.Grid("#myGrid", slickdata, columns, options); 
    // grid.setSelectionModel(new Slick.RowSelectionModel()); 
}) 

输出

{ 
    p: { 
     month: "May-2014", 
     teamed: "Y", 
     net: 100000 
    } 
} 

不显示任何错误,在控制台

+2

首先,不要使用警报进行故障排除。其次,尝试console.log(数据)。 “slickdata我”是一个文本字符串。 –

+0

'data.length'未定义... –

+1

getJSON是异步的。所以,当你提醒/使用它时,slickdata不会被填充。 –

回答

0

如果你期待一个对象数组(我对你的数据结构有点困惑),那么你可以使用for循环遍历它,但根据你的JSON输出,没有数组,你只是简单的得到一个对象。所以你只需要得到这个对象并使用它:

var slickdata = []; 
$.getJSON("comm/j/abc?action=hi", function(data) { 
    myData = data.p; 
    slickdata[0] = { 
    month: myData.month, 
    teamed: myData.teamed, 
    net: myData.net 
    }; 
}); 
0

你确定你是从Web服务得到什么了?尝试只是你for循环之前,补充一点:

alert(data.toSource()); 

然后,而不是alert(slickdata);恕我直言,你应该写alert(slickdata.toSource());因为它是对象的数组。

0

首先,如果对象没有长度,则无法基于对象的长度循环对象。在你的情况下,你可以简单地使用data.p.

slickdata[0] = data.p; // this replaced your entire for loop 

此外,您需要初始化成功回调内的网格,否则它不能访问slickdata。

$(function(){ 
    $.getJSON("comm/j/abc?action=hi", function(data) { 
     grid = new Slick.Grid("#myGrid", [data.p], columns, options); 
    }); 
}); 

我不知道,但网格是否可以使用该数据。

相关问题