静坐常思己过,闲谈莫论人非,能受苦乃为志士,肯吃亏不是痴人,敬君子方显有德,怕小人不算无能,退一步天高地阔,让三分心平气和,欲进步需思退步,若着手先虑放手,如得意不宜重往,凡做事应有余步。持黄金为珍贵,知安乐方值千金,事临头三思为妙,怒上心忍让最高。切勿贪意外之财,知足者人心常乐。若能以此去处事,一生安乐任逍遥。

EXT Ajax访问url返回405错误的解决办法

作者:大鹏 发布于:2008-6-28 15:48 Saturday 分类:JavaScript与HTML

昨日用了Ext Tree组件做一个东西,需要用到ajax对节点逐级加载,开始数据用的静态数据data.txt,一切程序都测好了然后放到系统中测试,将data.txt换成了servlet,发现什么都不显示,单独访问servlet也能正常返回json数据,猜想应该是出现ajax调用错误了,检查了传递的参数与服务端需要的参数名也丝毫没有问题,Loader的代码大致是这样的:

[codes=js]
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'}  //部门
                    });
                }
            }
        })
[/codes]
接着为loader加了一个异常监听:

[code]loadexception:function(tree,node,res){
    alert(res.status);
}[/code]
运行弹出“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和''来检测空参数值就可能出现问题。如果初始访问不需要参数,则将参数都设为空,否则设定为特定的值即可。


标签: javascript ajax c#

et_highlighter
发表评论 »本文目前尚无任何评论

发表评论

干净网络从你做起,切勿黏贴小广告