A JavaScript Fancier

伟大的javascript技术研究中...

  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  304 随笔 :: 0 文章 :: 479 评论 :: 0 Trackbacks


昨日用了Ext Tree组件做一个东西,需要用到ajax对节点逐级加载,开始数据用的静态数据data.txt,一切程序都测好了然后放到系统中测试,将data.txt换成了servlet,发现什么都不显示,单独访问servlet也能正常返回json数据,猜想应该是出现ajax调用错误了,检查了传递的参数与服务端需要的参数名也丝毫没有问题,Loader的代码大致是这样的:
loader: new Tree.TreeLoader({
            dataUrl:'data.servlet',
            baseAttrs:{leaf:
true},
            listeners:{
                beforeload:
function(treeLoader, node){
                    
this.baseParams={    //传递两个参数
                        nodeid:node.attributes.nodeid,
                        orgid:node.attributes.orgid
                    };
                    node.on(
"append",function(tree,node,cnode){
                            
var icon=cnode.attributes.type.toLowerCase();
                            
if(icon=="p"){cnode.attributes.iconCls='c3'}  //人员
                            if(icon=="m"){cnode.attributes.iconCls='c2'}  //机构
                            if(icon=="d"){cnode.attributes.iconCls='c2'}  //部门
                    });
                }
            }
        })

接着为loader加了一个异常监听:
loadexception:function(tree,node,res){
    alert(res.status);
}


运行弹出“405”,查了一下这个状态码的意义,原来是资源禁止访问,在java里也就是参数传递方式不对,Servlet用GET接受数据,但请求用POST传递数据,因此就会出现这个问题,知道原因就好办了,在treeLoader里加一个requestMethod:'GET'就ok了。
=======================================
还有一个问题要注意:
tree ajax第一次请求数据时传递的的参数的值在rootNode里面设定,如
var root = new Tree.AsyncTreeNode({text: '根节点',nodeid:'',orgid:''});
里面的nodeid和orgid就是要发送到服务端的参数,注意与baseParams照应即可,这个值最好在rootNode里应该设定一下,否则服务端接收到的nodeid和orgid值就是undefined,如果服务端用null和''来检测空参数值就可能出现问题。如果初始访问不需要参数,则将参数都设为空,否则设定为特定的值即可。
posted on 2008-05-30 09:46 Yemoo'S JS Blog 阅读(5176) 评论(3)  编辑 收藏 引用 所属分类: Js框架组件

评论

# re: EXT Ajax访问url返回405错误的解决办法 2009-02-01 12:07 周江波
// JavaScript Document
Ext.onReady(function(){
var tree = new Ext.tree.TreePanel({
el: 'tree',
loader: new Ext.tree.TreeLoader({dataUrl: 'tree.txt'}),
requestMethod:'GET'
});
var root=new Ext.tree.AsyncTreeNode({
text:'我是根节点'
});
tree.setRootNode(root);
tree.render();
root.expand(true,true);
});

http://192.168.1.66/new/ext-2.2/examples/treedemo/tree.txt 405 Method not allowed 14ms
以上是错误提示,我找到原因,请高手帮忙,谢谢!!!  回复  更多评论
  

# re: EXT Ajax访问url返回405错误的解决办法 2009-02-01 12:13 周江波
当我改成
var tree = new Ext.tree.TreePanel('tree',{
loader: new Ext.tree.TreeLoader({dataUrl: 'tree.txt'}),
}); 的时候又报以下错误:

this.root is undefined
[Break on this error] Ext.tree.TreePanel=Ext.extend(Ext.Panel,...Ext.reg("treepanel",Ext.tree.TreePanel);
  回复  更多评论
  

# re: EXT Ajax访问url返回405错误的解决办法 2014-08-15 15:08 倔强的土豆
果然是requestMethod:'GET' 的问题。哈哈  回复  更多评论
  

只有注册用户登录后才能发表评论。