注意Ext.Ajax.request是异步

    <script type="text/javascript">

 

        // 以下处理没有问题

        function showDetailsForEdit_1(node) {
            //先清除内容
            Ext.getCmp('HiddenNode').setValue(null);

            Ext.Ajax.request({
                url: loadNodeDetailsUrl,
                method: "POST",
                waitMsg: "请等待!",
                params: { nodeId: node.id },
                success: function(result) {


                    var responseObj = Ext.util.JSON.decode(result.responseText);

                    if (responseObj.success == false) {
                        Ext.Msg.alert('错误', responseObj.errorMessage);
                        return;
                    }

                    var data = eval('(' + responseObj.script + ')');


                        Ext.getCmp('txtName').setValue(data.NAME);
                        Ext.getCmp('txtOrderId').setValue(data.ORDER_ID);
                        Ext.getCmp('txtRemark').setValue(data.REMARK);

                },
                failure: function(result) {
                    //功能暂没有测试
                    var responseObj = Ext.util.JSON.decode(result.responseText);

                    if (responseObj.success == false) {
                        Ext.Msg.alert('错误', responseObj.errorMessage);
                        return;
                    };
                }
            });
        }

 

        //--------------------------以下处理方式有问题

        function loadNodeInfo(node) {
            //先清除内容
            Ext.getCmp('HiddenNode').setValue(null);

            Ext.Ajax.request({
                url: loadNodeDetailsUrl,
                method: "POST",
                waitMsg: "请等待!",
                params: { nodeId: node.id },
                success: function(result) {


                    var responseObj = Ext.util.JSON.decode(result.responseText);

                    if (responseObj.success == false) {
                        Ext.Msg.alert('错误', responseObj.errorMessage);
                        return;
                    }

                    var data = eval('(' + responseObj.script + ')');

 

                    Ext.getCmp('HiddenNode').setValue(data);

 

                },
                failure: function(result) {
                    //功能暂没有测试
                    var responseObj = Ext.util.JSON.decode(result.responseText);

                    if (responseObj.success == false) {
                        Ext.Msg.alert('错误', responseObj.errorMessage);
                        return;
                    };
                }
            });
        }

        function showDetailsForEdit_2() {
       
            var tree = Ext.getCmp('TreePanel1');
            var node = tree.getSelectionModel().getSelectedNode();

            if (!Ext.isEmpty(node) && node.id != 0) {
                //错误在这里!此处异步处理的获得的数据(可能取到了,也可能没取到)不能应用于下面的控件赋值。

                //应用firebug跟踪时还发现一个firebug 跟踪时的一个问题:

                //当跳转到异步过程后,跟踪不再回到本调用过程。异步过程处理完后,跟踪也就结束了!
                loadNodeInfo(node);

 

                if (!Ext.isEmpty(Ext.getCmp('HiddenNode').value)) {
                    var data = Ext.getCmp('HiddenNode').value;
                    Ext.getCmp('txtDetailsEditName').setValue(data.NAME);
                    Ext.getCmp('txtDetailsEditOrderId').setValue(data.ORDER_ID);
                    Ext.getCmp('txtDetailsEditRemark').setValue(data.REMARK);
                };
               
                Ext.getCmp('WinDetailsEdit').show();
            }
            else {
            Ext.Msg.alert('提示', '你可能没有选择相应的结点!');
            };           

        }

        //------------------------------------------------------------------------------
        
    </script>

 

由于想复用loadNodeInfo过程,所以,用以下方式:

 

        var loadNodeDetailsUrl = '/ModuleType/loadNodeDetails';


        function test(data) {
            Ext.getCmp('txtName').setValue(data.NAME);
            Ext.getCmp('txtOrderId').setValue(data.ORDER_ID);
            Ext.getCmp('txtRemark').setValue(data.REMARK);
        }

 

        function loadNodeDetails(node,fn) {
            Ext.Ajax.request({
                url: loadNodeDetailsUrl,
                method: "POST",
                waitMsg: "请等待!",
                params: { nodeId: node.id },
                success: function(result) {

                    //为了应对特殊字符,应该进行编码转换
                    var responseObj = Ext.util.JSON.decode(result.responseText);

                    if (responseObj.success == false) {
                        Ext.Msg.alert('错误', responseObj.errorMessage);
                        return;
                    }


                    var data = eval('(' + responseObj.script + ')');


                    fn(data);


                },
                failure: function(result) {
                    //功能暂没有测试
                    var responseObj = Ext.util.JSON.decode(result.responseText);

                    if (responseObj.success == false) {
                        Ext.Msg.alert('错误', responseObj.errorMessage);
                        return;
                    }
                }
            });
        }

 

调用方式:

<Listeners>
     <Click Handler="if(node.id!=0){e.stopEvent();loadNodeDetails(node,test);}" />
</Listeners>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Ext.js提供了一个方便的类Ext.Ajax来执行异步HTTP请求,也就是AJAX请求。以下是使用Ext.Ajax的示例代码: ```javascript Ext.Ajax.request({ url: 'your-url', method: 'GET', // HTTP请求方法,可以是'GET'、'POST'等 params: { key1: 'value1', key2: 'value2' }, // 请求参数,可以是对象或字符串 success: function(response, options) { // 请求成功的回调函数 console.log(response.responseText); }, failure: function(response, options) { // 请求失败的回调函数 console.log(response.status); } }); ``` 在上面的代码中,我们使用Ext.Ajax.request方法发起了一个GET请求,请求的URL为'your-url',请求参数为{ key1: 'value1', key2: 'value2' }。请求成功后,会执行success回调函数,打印出响应文本;请求失败后,会执行failure回调函数,打印出响应状态码。 ### 回答2: Ext.js是一个JavaScript框架,用于构建富客户端应用程序。它提供了诸多功能和组件,其中之一就是Ajax(Asynchronous JavaScript and XML)。 通过Ext.js的Ajax组件,我们可以使用JavaScript发送HTTP请求,并获取服务器返回的数据,而无需刷新整个页面。这使得我们能够动态更新页面内容,提升用户体验。 使用Ext.js的Ajax,我们可以通过多种方式发送请求,如GET、POST、PUT等。我们可以指定请求的URL、参数和请求类型。我们还可以设置回调函数,在服务器响应后对返回数据进行处理。这样,我们可以根据服务器的响应结果,动态更新页面上的内容或执行其他操作。 此外,Ext.js的Ajax还提供了强大的错误处理机制。当请求发生错误时,我们可以通过回调函数获知,并进行相应的处理。这使得我们能够更好地处理异常情况,保证应用程序的稳定性和可靠性。 总结来说,Ext.js的Ajax功能为我们提供了一种方便、灵活和强大的方式与服务器进行数据交互。它使得我们可以在客户端页面动态获取和更新数据,提升用户体验,同时也提高了我们开发程序的效率。 ### 回答3: Ext.js 是一个用于构建富客户端应用程序的 JavaScript 框架,它提供了丰富的组件和工具来简化开发流程。其中,AJAXExt.js 中重要的特性之一。 AJAX(Asynchronous JavaScript and XML)是一种异步通信技术,可以在不重新加载整个页面的情况下向服务器发送请求并获取响应。在 Ext.js 中,我们可以通过使用 Ext.Ajax 类来实现 AJAX 的功能。 通过 Ext.Ajax,我们可以发送 GET、POST、PUT、DELETE 等不同类型的请求,同时也可以设置请求的 URL、参数、请求头等。我们可以使用回调函数来处理服务器返回的数据。当请求成功时,可执行 success 回调函数;当请求失败时,可执行 failure 回调函数。 在 Ext.js 中,AJAX 可以帮助我们实现与后端服务器的数据交互,实现动态数据加载、表单提交、登录认证等功能。通过使用 AJAX,我们可以向服务器发送请求并处理响应,实现前端与后端的数据交互,用户体验更加流畅。 总之,Ext.js 提供的 AJAX 功能使得开发者可以更加方便地通过异步通信方式与后端服务器进行交互,减少页面加载时间,提升用户体验。同时,Ext.js 还提供了其他丰富的功能和组件,使得开发复杂的富客户端应用程序变得更加简单。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值