关于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还有其他功能,比如修改调用参数等。
分享到:
相关推荐
- `scope`: 指定回调函数的作用域。 4. **数据处理**: - `dataType`: 预期的服务器响应类型,如json、xml、html等。 - `transformResponse`: 在处理响应数据之前运行的函数。 - `processData`: 是否自动处理...
ExtJS 是一个流行的JavaScript...遇到问题时,应首先检查配置,然后关注服务器响应和回调处理,最后考虑优化请求策略以提高用户体验。对于具体的解决方案,建议查看博客链接中的内容,它可能针对特定情况进行了解答。
传统的 AJAX 请求都是异步的,即请求发送后不会阻塞后续代码的执行,而是通过回调函数来处理返回的数据。然而,在某些情况下,开发者可能需要等待 AJAX 请求的结果才能继续执行后续的操作,这时就需要使用同步的 ...
extjs中ajax网页无刷新与后台交互的代码实现,使用javascript开发的可以参照学习。。
下面将详细解释标题和描述中提到的ExtJs事件处理,以及与Ajax交互的相关知识。 1. **基本事件处理** - 在ExtJs中,可以使用`on`方法来监听DOM元素或Ext组件的事件。例如,监听ID为'somelink'的元素的点击事件,...
要发送一个Ajax请求,你可以创建一个`Ext.Ajax.request`配置对象,指定URL、请求方法(GET或POST)、参数以及回调函数。例如: ```javascript Ext.Ajax.request({ url: 'your_php_script.php', method: 'POST',...
在IT行业中,Asp.NET、ExtJS和Ajax是构建高效、动态Web应用程序的关键技术。"Asp.net+Extjs+Ajax轮询进度条.rar"这个压缩包文件显然包含了一个使用这些技术实现的特定功能——一个实时显示服务器处理进度的进度条...
在给定的标题和描述中,主要涉及了ExtJS中的动态树(tree)功能以及与AJAX的结合使用。下面将详细介绍这些知识点。 **动态树(Dynamic Tree)** 动态树是ExtJS中的一种控件,用于展示层次结构的数据。它可以实时地...
通过查看和学习这个例子,你可以了解如何在实际项目中实现ExtJS AJAX树。 值得注意的是,ExtJS提供了一种灵活的API,允许开发者自定义节点的渲染方式、扩展节点操作以及与其他组件交互。例如,可以添加右键菜单、...
总的来说,虽然同步Ajax请求在某些特定情况下有其用武之地,但在多数现代Web应用中,推荐使用异步请求配合回调函数或Promise来确保良好的用户体验。在实际开发中,应谨慎考虑是否使用同步请求,并充分评估其潜在影响...
EXTJS AJAX请求的回调函数中,`response`对象包含了服务器返回的数据和状态信息。通常,我们需要解析响应体以获取实际数据。例如,对于JSON响应: ```javascript success: function(response, opts) { var data = ...
这个中文教程涵盖了ExtJS的核心概念、组件和Ajax技术的使用,同时也涉及到与Java后端的交互。让我们深入探讨这些知识点。 首先,ExtJS提供了丰富的UI组件,如表格、面板、窗口、菜单等,这些组件都是基于组件化设计...
开发者通过这个项目可以学习到EXTJS、Struts和Ajax的集成使用,以及如何在实际项目中有效利用这些技术。项目的全面性和实用性被高度赞扬,意味着它可能包含了丰富的示例代码和详细的文档,对于学习者来说具有很高的...
可以把ExtJS用在.Net、Java、Php等各种开发语言...全新的图表库:ExtJS4中, 全新的、插件自由的图表库是最激动人心的新功能之一,创建了饼图、线图、面积图、雷达图等等,所有这些都是动画的、易于配置的和可扩展的。
"ExtJS快速入门指南.pdf"和"ExtJS快速入门.ppt"将帮助初学者快速掌握ExtJS的使用,包括如何创建第一个ExtJS应用、使用组件库、配置布局以及实现数据绑定。 总结来说,这个教程组合提供了全面的JavaScript基础知识、...
这种方法简化了Ajax请求的过程,开发者只需提供请求URL、请求类型(默认为GET)、请求参数、回调函数等信息即可发起请求。例如: ```javascript Ext.Ajax.request({ url: 'example.php', // 请求的URL method: '...
- 使用`Ext.Ajax.request`方法可以发起Ajax请求,它接受多个配置参数,如URL、method、params、success和failure回调函数等。 3. **请求配置参数** - `url`: 服务器端接口地址。 - `method`: 请求类型,通常是...
在"ExtJS3.0源代码"中,我们可以深入理解这个框架的工作原理和设计模式。源码分析有助于提升对JavaScript和Web开发的理解,对于前端开发者来说,是一份宝贵的参考资料。 1. **组件系统**:ExtJS3.0的组件模型是其...