`
chengzhi
  • 浏览: 112231 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

ExtJS中ajax回调函数,关于scope和createDelegate()

阅读更多

关于JavaScript中this的使用,这是一个由来已久的问题了。我们这里就不介绍它的发展历史了,只结合具体的例子,告诉大家可能会遇到什么问题,在遇到这些问题时EXT是如何解决的。在使用EXT时,最常碰到的就是使用Ajax回调函数时出现的问题,如下面的代码所示。

 

<input type="text" name="text" id="text">

 

<input type="button" name="button" id="button" value="button">

 

现在的HTML 页面中有一个text输入框和一个按钮。我们希望按下这个按钮之后,能用Ajax去后台读取数据,然后把后台响应的数据放到text中,实现过程如代码清单10-6所示。

 

代码清单10-6 Ajax中使用回调函数

 

function doSuccess(response) {

 

    text.dom.value = response.responseText;

 

}

 

Ext.onReady(function(){

 

    Ext.get('button').on('click', function(){

 

        var text = Ext.get('text');

 

        Ext.lib.Ajax.request(

 

            'POST',

 

            '08.txt',

 

            {success:doSuccess},

 

            'param=' + encodeURIComponent(text.dom.value)

 

        );

 

    });

 

});

 

在上面的代码中,Ajax已经用Ext.get('text')获得了text,以为后面可以直接使用,没想到回调函数success不会按照你写的顺序去执行。当然,也不会像你所想的那样使用局部变量text。实际上,如果什么都不做,仅仅只是使用回调函数,你不得不再次使用Ext.get('text')重新获得元素,否则浏览器就会报text未定义的错误。

 

在此使用Ext.get('text')重新获取对象还比较简单,在有些情况下不容易获得需要处理的对象,我们要在发送Ajax请求之前获取回调函数中需要操作的对象,有两种方法可供选择:scope和createDelegate。

 

l    为Ajax设置scope。

 

  function doSuccess(response) {

 

      this.dom.value = response.responseText;

 

  }

 

  Ext.lib.Ajax.request(

 

      'POST',

 

      '08.txt',

 

      {success:doSuccess,scope:text},

 

      'param=' + encodeURIComponent(text.dom.value)

 

  );               

 

在Ajax的callback参数部分添加一个scope:text,把回调函数的scope指向text,它的作用就是把doSuccess函数里的this指向text对象。然后再把doSuccess里改成this.dom. value,这样就可以了。如果想再次在回调函数里用某个对象,必须配上scope,这样就能在回调函数中使用this对它进行操作了。

 

l    为success添加createDelegate()。

 

  function doSuccess(response) {

 

      this.dom.value = response.responseText;

 

  }

 

 

 

  Ext.lib.Ajax.request(

 

      'POST',

 

      '08.txt',

 

      {success:doSuccess.createDelegate(text)},

 

      'param=' + encodeURIComponent(text.dom.value)

 

  );

 

createDelegate只能在function上调用,它把函数里的this强行指向我们需要的对象,然后我们就可以在回调函数doSuccess里直接通过this来引用createDelegate()中指定的这个对象了。它可以作为解决this问题的一个备选方案。

 

如果让我选择,我会尽量选择scope,因为createDelegate是要对原来的函数进行封装,重新生成function对象。简单环境下,scope就够用了,倒是createDelegate还有其他功能,比如修改调用参数等。

分享到:
评论
1 楼 温柔企鹅 2011-11-08  
功力太浅,表示压力很大!

相关推荐

    extjs对ajax的支持文档

    - `scope`: 指定回调函数的作用域。 4. **数据处理**: - `dataType`: 预期的服务器响应类型,如json、xml、html等。 - `transformResponse`: 在处理响应数据之前运行的函数。 - `processData`: 是否自动处理...

    ExtJs Ajax 同步问题

    ExtJS 是一个流行的JavaScript...遇到问题时,应首先检查配置,然后关注服务器响应和回调处理,最后考虑优化请求策略以提高用户体验。对于具体的解决方案,建议查看博客链接中的内容,它可能针对特定情况进行了解答。

    extjs3.0 ajax 同步请求

    传统的 AJAX 请求都是异步的,即请求发送后不会阻塞后续代码的执行,而是通过回调函数来处理返回的数据。然而,在某些情况下,开发者可能需要等待 AJAX 请求的结果才能继续执行后续的操作,这时就需要使用同步的 ...

    extjs中ajax的实现源码

    extjs中ajax网页无刷新与后台交互的代码实现,使用javascript开发的可以参照学习。。

    ExtJs事件处理 ajax

    下面将详细解释标题和描述中提到的ExtJs事件处理,以及与Ajax交互的相关知识。 1. **基本事件处理** - 在ExtJs中,可以使用`on`方法来监听DOM元素或Ext组件的事件。例如,监听ID为'somelink'的元素的点击事件,...

    在Extjs中使用ajax传参到php中

    要发送一个Ajax请求,你可以创建一个`Ext.Ajax.request`配置对象,指定URL、请求方法(GET或POST)、参数以及回调函数。例如: ```javascript Ext.Ajax.request({ url: 'your_php_script.php', method: 'POST',...

    Asp.net+Extjs+Ajax轮询进度条.rar

    在IT行业中,Asp.NET、ExtJS和Ajax是构建高效、动态Web应用程序的关键技术。"Asp.net+Extjs+Ajax轮询进度条.rar"这个压缩包文件显然包含了一个使用这些技术实现的特定功能——一个实时显示服务器处理进度的进度条...

    tree 动态树 extjs ajax

    在给定的标题和描述中,主要涉及了ExtJS中的动态树(tree)功能以及与AJAX的结合使用。下面将详细介绍这些知识点。 **动态树(Dynamic Tree)** 动态树是ExtJS中的一种控件,用于展示层次结构的数据。它可以实时地...

    extjs ajax tree(js动态树,无需递归)

    通过查看和学习这个例子,你可以了解如何在实际项目中实现ExtJS AJAX树。 值得注意的是,ExtJS提供了一种灵活的API,允许开发者自定义节点的渲染方式、扩展节点操作以及与其他组件交互。例如,可以添加右键菜单、...

    extjs ajax同步请求所需js

    总的来说,虽然同步Ajax请求在某些特定情况下有其用武之地,但在多数现代Web应用中,推荐使用异步请求配合回调函数或Promise来确保良好的用户体验。在实际开发中,应谨慎考虑是否使用同步请求,并充分评估其潜在影响...

    EXTJS AJAX方式发送数据给后台服务器.rar

    EXTJS AJAX请求的回调函数中,`response`对象包含了服务器返回的数据和状态信息。通常,我们需要解析响应体以获取实际数据。例如,对于JSON响应: ```javascript success: function(response, opts) { var data = ...

    extjs中文教程 ajax

    这个中文教程涵盖了ExtJS的核心概念、组件和Ajax技术的使用,同时也涉及到与Java后端的交互。让我们深入探讨这些知识点。 首先,ExtJS提供了丰富的UI组件,如表格、面板、窗口、菜单等,这些组件都是基于组件化设计...

    extjs最全项目 js struts Ajax

    开发者通过这个项目可以学习到EXTJS、Struts和Ajax的集成使用,以及如何在实际项目中有效利用这些技术。项目的全面性和实用性被高度赞扬,意味着它可能包含了丰富的示例代码和详细的文档,对于学习者来说具有很高的...

    ExtJS(ajax框架) 4.2.1

    可以把ExtJS用在.Net、Java、Php等各种开发语言...全新的图表库:ExtJS4中, 全新的、插件自由的图表库是最激动人心的新功能之一,创建了饼图、线图、面积图、雷达图等等,所有这些都是动画的、易于配置的和可扩展的。

    JavaScript和ExtJS及Ajax基础教程

    "ExtJS快速入门指南.pdf"和"ExtJS快速入门.ppt"将帮助初学者快速掌握ExtJS的使用,包括如何创建第一个ExtJS应用、使用组件库、配置布局以及实现数据绑定。 总结来说,这个教程组合提供了全面的JavaScript基础知识、...

    ExtJS对Ajax的支持

    这种方法简化了Ajax请求的过程,开发者只需提供请求URL、请求类型(默认为GET)、请求参数、回调函数等信息即可发起请求。例如: ```javascript Ext.Ajax.request({ url: 'example.php', // 请求的URL method: '...

    ExtJs ajax提交

    - 使用`Ext.Ajax.request`方法可以发起Ajax请求,它接受多个配置参数,如URL、method、params、success和failure回调函数等。 3. **请求配置参数** - `url`: 服务器端接口地址。 - `method`: 请求类型,通常是...

    Ajax框架ExtJS3.0源代码

    在"ExtJS3.0源代码"中,我们可以深入理解这个框架的工作原理和设计模式。源码分析有助于提升对JavaScript和Web开发的理解,对于前端开发者来说,是一份宝贵的参考资料。 1. **组件系统**:ExtJS3.0的组件模型是其...

Global site tag (gtag.js) - Google Analytics