我想显示一组数据,我通过使用dojo.xhrget()方法异步调用服务器来检索这些数据。我正在通过URL检索数据,我希望每当用户在内容窗格中单击时,一组新的值将在网格中显示而不刷新整个页面。问题是数据没有显示在Grid中。我通过xhrget()错误方法收到错误。
我的脚本代码是::
<script>
function populateGrid(){
dojo.xhrGet({
url: "http://localhost:8080/2_8_2012/jsp/GetJson.jsp",
load: fillGrid,
error:handleError,
preventCache:true
});
}
function fillGrid(data, ioArgs)
{
alert(data);
var newData = {
identifier: "ID",
items: data
};
var dataStore = new dojo.data.ItemFileReadStore({data: newData, id:"dataStoreId"});
var gridStructure =[[
{ field: "ID",
name: "ID_Emp",
width: "20%",
classes:"firstName"
},
{
field: "Names",
name: "Name",
width: "20%",
classes: "firstName"
},
{ field: "Email",
name: "Mail",
width: "20%",
classes:"firstName"
}
]
];
var grid = dijit.byId("grid.DataGrid");
grid.setStore(dataStore);
grid.startup();
}
function handleError() {
alert("An error occurred while invoking the service.");
}
</script>
现在,alert(data)和http://localhost:8080/2_8_2012/jsp/GetJson.jsp的输出相同,即::
[{"ID":1,"Names":"Shantanu","Email":"shantanu.tomar@gmail.com"},{"ID":2,"Names":"Mayur","Email":"mayur.sharma@gmail.com"},{"ID":26,"Names":"Rohit"}]
我的xhr.get函数在数据检索方面运行良好。即当我更新数据库中的值时。我确实获得具有更新值的警报(数据)输出,而无需再次刷新整个页面。但数据不会显示在数据网格中。
我收到提醒
An error occurred while invoking the service.
http://localhost:8080/2_8_2012/jsp/GetJson.jsp的代码是::
<%@ page language="java" contentType="application/json; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ page import="MyPackage.PopulateTextbox" %>
<%
String temp1;
PopulateTextbox obj = new PopulateTextbox();
temp1 = obj.method();
%>
<%=temp1 %>
标记代码为::
<div id="grid.DataGrid" data-dojo-type="dojox.grid.DataGrid" title="Simple Grid" data-dojo-props= "autoWidth:true, structure: gridStructure" style="width:900px; height:200px;"></div>
<div id="contentpaneid" dojoType="dijit.layout.ContentPane" title="Pending Activities" style="background-image: url('http://localhost:8080/2_8_2012/images/17.png');" onclick="populateGrid">
我没有得到什么问题。你可以帮我解决为什么我收到错误警报。谢谢。
答案 0 :(得分:2)
Pratik Chandra正确地提到了这个问题 - 数据网格正在填充而没有设置任何商店。我建议将您的datagrid更改为以编程方式填充
所以你的宣言:
<div id="grid.DataGrid" data-dojo-type="dojox.grid.DataGrid"
需要改为:
<div id="mygrid" ></div>
然后更改行:
var grid = dijit.byId("grid.DataGrid");
为:
var grid = new dojox.grid.DataGrid({
id: "grid",
jsid: "grid",
store: dataStore,
structure: gridStructure,
style: 'width:900px;height:300px;'
}, dojo.byId("mygrid"));
grid.startup();
另请注意,无论何时要刷新网格中的数据,都不需要重新填充网格,只需使用新值更新数据存储区,数据网格将自动刷新新数据:-) Dojo需要注意那部分。
要清理数据存储区中的现有数据并使用新数据填充它,请在IFRS上设置clearOnClose属性。请参阅:Updating Dojo Dijit FilteringSelect's store with asynchonous data了解clearOnClose