手头有一个需求,就是将一个Servlet的doGet方法返回的xml实时刷新显示到gridpanel上[初次接触extjs,有一定js基础]
servlet大致代码如下response.setCharacterEncoding("utf-8");
PrintWriter out = new PrintWriter(response.getOutputStream());
strXmls = "<dataset><id>1</id>....<terminal><code>156</code></terminal><terminal>....</terminal></dataset>";//定义不写了,怎么组织的也粗略写一下,没写xml格式的头
BufferedWriter bw = new BufferedWriter(out);
try
{
bw.write(strXmls);
bw.flush();
}
/*别的代码就不加了类似关闭什么的*/现在把客户端脚本关键部分传上来store = new Ext.data.Store({
//url: 'xml/comm_more.xml', //指定一个数据源url
//url: 'http://127.0.0.1:9090/Manager/test'
//url: 'http://127.0.0.1/xmlserver.asp',
//url: 'xmlserver.asp',
proxy: new Ext.data.HttpProxy({
url: 'xmlserver.asp',
failure : function() {   
Ext.MessageBox.alert("数据加载失败!请检查");
},
success: function()
{
//Ext.MessageBox.alert("数据加载!请检查");
}
}),
reader: new Ext.data.XmlReader({
record: 'Terminal',
id: 'id',
totalRecords: 'totalRecords',
success: 'success'
}, /*字段数组*/["DateTime", "Code", "AutoRun", "CPUUtilityrate", "MemUtilityrate", "Started", "D-Free", "D-Total", "E-Free", "E-Total", "F-Free", "F-Total"])  //指定读用的工具
});
grid = new Ext.grid.GridPanel({
//frame:true,
stripeRows : true, //设置分隔符
animCollapse : true, //设置关闭面板时的动态效果
enableColumnMove : false, //关闭列拖动
enableColumnResize : false, //关闭列大笑
renderTo:Ext.getBody(),
//title:'',
cm: cm,    //定义的一个Ext.grid.ColumnModel,不贴出来了
store: store,
viewConfig:{
forceFit: true
},
width: 800, 
height: 300
//loadMask:true
});如上面代码所写,现在的store用的是一个proxy和一个reader,proxy用的是HttpProxy,传的是一个本地的asp文件 dim http, returnStr, URL
URL = "http://127.0.0.1:9090/Manager/test"
on error resume next

Set http=Server.CreateObject("Microsoft.XMLHTTP")
http.Open "GET",URL,False
http.send
returnStr=bytes2bstr(http.responsebody)
response.write returnStrasp里只是做了一个数据的缓冲(做这个的原因是我昨天晚上将HttpProxy的url指定为tomcat的servlet,gridpanel什么都不显示),于是我想是不是因为HttpProxy在读servlet的时候还读了一些http头,所以我就写了这么一个asp来将servlet的内容转成网页显示的内容)
结果还是一样不显示,不过如果将HttpProxy的url换成本地server上的一个xml文件,还是可以让gridpanel显示出来的,而且可以实时刷新
于是我想是不是httpproxy在读servlet或asp文件的时候出错了,我就在httpproxy下添加了success和failure的回调,如下proxy: new Ext.data.HttpProxy({
url: 'xmlserver.asp',
failure : function() {   
Ext.MessageBox.alert("数据加载失败!请检查");
},
success: function()
{
//Ext.MessageBox.alert("you did it");
}
})然而每次都是弹出"you did it",由此我认为可能是xmlreader在读数据的时候可能遇到非法数据了,于是我将数据请求放到了一个方法里由Ext.Ajax.request来执行 Ext.Ajax.request(
{
url: 'http://127.0.0.1:9090/Manager/test',
method: 'get',
success: onGetXmlSucc,
failure: onGetXmlFail
}
);
function onGetXmlSucc(request, options)
{
g_strXml = request.responseText;

if ( typeof(DOMParser) == "undefined" )
{
if (g_xmlDoc == null)
{
g_xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
g_xmlDoc.async = false;
}
g_xmlDoc.loadXML(g_strXml);
}
else
{
if ( g_xmlDoc == null)
{
if ( g_domParser == null)
{
g_domParser = new DOMParser();
}
}
g_xmlDoc = g_domParser.parseFromString(g_strXml, "application/xml");
}
}这样我启用一个timer就可以定时刷新g_xmlDoc
与此同时,我将store的定义修改为如下store = new Ext.data.Store({
proxy: new Ext.data.MemoryProxy(g_xmlDoc),
reader: new Ext.data.XmlReader({
record: 'Terminal',
id: 'id',
totalRecords: 'totalRecords',
success: 'success'
}, /*字段数组*/["DateTime", "Code", "AutoRun", "CPUUtilityrate", "MemUtilityrate", "Started", "D-Free", "D-Total", "E-Free", "E-Total", "F-Free", "F-Total"])  //指定读用的工具
});结果,依就没有显示,请各位Ext大牛们帮帮忙指导下,我的问题到底出在哪?
是我这几种尝试都不对?还是哪的代码写错了