`
endual
  • 浏览: 3558066 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Extjs4 --- 获取html中的按钮

 
阅读更多

 

Ext.onReady(function() {

			// Ext.MessageBox.alert("title","dd") ;
			var btnLogin = Ext.getDom("btnLogin"); // 获取id是btnLogin的按钮
			btnLogin.addEventListener("click", function() {

						var username = Ext.getDom("username").value; //获取id为username表单的值
						var password = Ext.getDom("pwd").value;

						usernamestr = new String(username) + "";
						passwordstr = new String(password) + "";

						// 对输入的用户名和密码进行客户端的检验

						Ext.Ajax.request({
									url : 'login.action',
									method : "POST",
									timeout : 10000,
									params : {
										username : usernamestr,
										password : passwordstr
									},

									success : function(response) {
										var text = response.responseText;
										var status = Ext.decode(text).status; //转化为json对象

										if (status == 'success') {
											// 跳转
											window.location = "success.jsp"; //页面段跳转
										} else if (status == 'failure') {
											// 提示错误
											Ext.MessageBox.alert("注意",
													"用户名或者密码错误,请检查!");

										}

									},

									failure : function(response, opts) {
										
										
										
										var text = response.responseText;
										alert("加载失败!" + text);
									}

								});

					}, true);

		});


                                  

ExtJs4 笔记(3) Ext.Ajax 对ajax的支持

Posted on 2011-12-09 00:31 lipan 阅读(4021) 评论(2编辑 收藏 

本篇主要介绍一下ExtJs常用的几个对JS语法的扩展支持,包括Ajax封装,函数事件操作封装,还有扩展的常用函数等。Ajax服务端交互式操作是提交到.NET MVC。后续服务端交互都采用这一方式实现。

一、ExtJs中的Ajax:Ext.Ajax.request

通过客户端向服务端发送Ajax请求,可以“直接”调用MVC的action方法,并传递参数,action返回值可以是普通字符串,也可以是json对象。请求可以添加自定义头信息。看下面例子:

1.异步请求,发送自定义请求头:

html页面如下:

[html]
1
2
3
4
<h1>Ajax服务端请求</h1>
<div class="content" id="div1">
<div>一共发起了<span id="span1" style="color:Red">0</span>次请求。</div>
</div>

我们先通过一个按钮单击事件触发ajax请求,服务端返回string到客户端,异步请求时,为请求添加自定义头“userHeader”,并在服务端获取。如下是js代码:

[Js]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Ext.onReady(function () {
    new Ext.Button({
        renderTo: "div1",
        text: "后台Ajax提交",
        handler: function () {
            Ext.Ajax.request({
                url: 'Ajax_Func1',
                headers: {
                    'userHeader': 'userMsg'
                },
                params: { a: 10, b: 20 },
                method: 'GET',
                success: function (response, options) {
                    Ext.MessageBox.alert('成功', '从服务端获取结果: ' + response.responseText);
                },
                failure: function (response, options) {
                    Ext.MessageBox.alert('失败', '请求超时或网络故障,错误编号:' + response.status);
                }
            });
        },
        id: "bt1"
    });
 
});

服务端MVC接受请求的action代码:

[C#]
1
2
3
4
5
public ContentResult Ajax_Func1(int a, int b)
{
    string userHeaderMsg = Convert.ToString(Request.Headers["userHeader"]);
    return Content((a + b).ToString() + ",userHeader:" + userHeaderMsg);
}

然后我们在火狐中调试:自定义请求头已被添加。

查看执行结果:

2.异步请求,返回json:

如果要返回json到客户端,MVC需要使用JsonResult的acton,自动将C#对象转换为json格式。客户端代码如下:

[Js]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Ext.onReady(function () {
 
    new Ext.Button({
        renderTo: "div1",
        text: "后台Ajax提交方式2返回JSON",
        handler: function () {
            Ext.Ajax.request({
                url: 'Ajax_Func2',
                params: { n: 10 },
                method: 'POST',
                callback: function (options, success, response) {
                    if (success) {
                        var responseJson = Ext.JSON.decode(response.responseText);
 
                        Ext.Msg.alert("成功", options.params.n + "的阶乘是:<font color='red'>" + responseJson.n1 + "</font><br />"
                      + options.params.n + "的累加是:<font color='red'>" + responseJson.n2 + "</font>");
                    } else {
                        Ext.Msg.confirm('失败',
                                            '请求超时或网络故障,错误编号:[' + response.status + ']是否要重新发送?', function (btn) {
                                                if (btn == 'yes') {
                                                    Ext.Ajax.request(options);
                                                }
                                            });
                    }
                }
            });
        }
    });
 
});

服务端代码:

[C#]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public JsonResult Ajax_Func2(int n)
{
    int n1 = 1;
    int n2 = 0;
    for (int i = 1; i <= n; i++)
    {
        n1 *= i;
        n2 += i;
    }
 
    var data = new
    {
        n1 = n1,
        n2 = n2
    };
 
    return Json(data, JsonRequestBehavior.AllowGet);
}

查看执行结果,我们先看看火狐调试响应的结果,可以查看返回的json内容:

界面执行结果:

3.异步文件上传

ExtJs通过强大的内部封装,使ajax请求看起来可以直接提交二进制流数据。每当提交文件数据时,ExtJs会自动创建iframe,在iframe中提交。提交完成后又自动移去,一切显得天衣无缝。下面演示一个通过异步请求无刷新文件上传的例子:

[html]
1
2
3
4
5
6
7
<h1>Ajax文件上传</h1>
<div class="content" id="div2">
<form id="form1">
请选择文本文件:<input type="file" name="file" />
<input type="button" id="button1" value="上传" />
</form>
</div>
[Js]
1
2
3
4
5
6
7
8
9
10
11
//文件上传
Ext.get("button1").on("click", function () {
    Ext.Ajax.request({
        url: "Ajax_FileUp",
        isUpload: true,
        form: "form1",
        success: function (response) {
            Ext.MessageBox.alert("上传成功,文本文件内容:", response.responseText);
        }
    });
});
[C#]
1
2
3
4
5
6
public ContentResult Ajax_FileUp(HttpPostedFileBase file)
{
    System.IO.StreamReader r = new System.IO.StreamReader(file.InputStream, System.Text.UTF8Encoding.Default);
    var str = r.ReadToEnd();
    return Content(str);
}

提交后我们发现,上传的文本文件内容已经被正确读取。

4.异步请求事件

当发起ajax请求之前,可以监听beforerequest事件,本例每当发起ajax事件时,都会把计算器+1:

[Js]
1
2
3
var ajaxCount = 0;
//每当Ajax请求发起时触发:
Ext.Ajax.on('beforerequest', function () { Ext.get("span1").update(++ajaxCount) }, this);

这样,每当ajax发起就可以被记录,可用作日志等。

二、元素对象Ajax式更新:Ext.Updater,[已弃用]

ExtJs为我们提供了异步方式更新dom元素内容的支持。这可以用在一些异步交互性比较强的地方,例如webgame等。我们来看看具体实现方式。

我们先在视图中写这样的html:

[html]
1
2
3
<div id="div1" title="d1" style="width:50px; height:50px; position:absolute; background-color:Green; top:100px">1</div>
<div id="div2">2</div>
<form id="form1"><input id="a" name="a" value="20" /><input id="b" name="b" value="50" /></form>

1.单个元素的及时更新

现在,我要通过c#在服务端计算a+b的值,然后将结果填到div1元素里面:

[Js]
1
2
3
4
Ext.get("div1").getUpdater().update({
    url: "Ext/UpdaterFunc",
    params: { a: 10, b: 3 }
});
[c#]
1
2
3
4
public ContentResult UpdaterFunc(int a,int b)
{
    return Content("a+b=" + (a + b));
}

页面加载后,将自动更新div1。再看看另外一种写法:

[Js]
1
2
3
4
5
6
Ext.get("div1").load({
    url: "Ext/UpdaterFunc",
    scripts: true,
    params: { a: 10, b: 47 },
    text: "请等待..."
});

2.通过提交表单更新

[Js]
1
Ext.get("div1").getUpdater().formUpdate("form1", "Ext/UpdaterFunc");

效果一样,只不过提交的参数来源于表单,参数名为对应的name值。

3.周期性更新

[Js]
1
2
3
//周期性更新
var up = new Ext.Updater("div1");
up.startAutoRefresh(5, "Ext/UpdaterFunc", { a: 10, b: 47 });

这段代码运行后将每隔5秒钟更新一次div1,用于需要适时核对服务端和客户端状态的情形。

作者:李盼(Lipan) 出处:[Lipan] (http://www.cnblogs.com/lipan/) 版权声明:本文的版权归作者与博客园共有。转载时须注明本文的详细链接,否则作者将保留追究其法律责任。
分享到:
评论

相关推荐

    extjs4-export

    这通常是EXTJS4中的Grid面板的数据源,可以通过store获取。确保数据是干净且适合Excel格式的,例如,处理日期和数字格式。 2. **数据转换**:将数据转换成Excel可以理解的格式。这可能涉及到将数据转换为CSV(逗号...

    ExtJS 4 button按钮

    ExtJS 4中的Button组件通过一系列可配置的选项提供了高度定制化的可能,下面将详细介绍这些配置项: - **id**:为按钮分配一个唯一的标识符,便于后续在代码中引用。 - **text**:设置按钮上的文本显示内容。 - **...

    Extjs4 权威指南(中)

    #### 一、Extjs4简介与获取途径 - **概述**:Extjs4是一款基于JavaScript的企业级富客户端Web应用程序开发框架,旨在简化前端开发过程,提供丰富的UI组件和强大的数据处理能力。 - **获取途径**:访问官方网站`...

    extjs培训2011-12-17

    要开始使用ExtJS,首先需要获取其库文件。通常,开发者可以通过访问官方网址`http://extjs.com/download`下载最新的ExtJS版本。安装完成后,开发者需要理解并熟悉其目录结构: 1. **adapter**:该目录包含了用于将...

    ExtJs-4.1.1a-gpl+中午手册+入门教程

    1. **安装与设置**:如何下载并引入ExtJS库到项目中,配置基本的HTML和JavaScript环境。 2. **Hello World**:创建第一个ExtJS应用,展示基础组件如Panel的使用。 3. **组件基础**:讲解如何创建和使用不同类型的...

    轻松搞定Extjs 带目录

    - **类的定义**: Extjs中的类继承于JavaScript原生类,通过Ext.extend来定义。这是Extjs实现面向对象编程的基础。 - **命名空间**: 命名空间在Extjs中用于组织和管理代码,避免变量和函数名的冲突。 #### 3. Extjs ...

    extjs-tree.zip_extjs tree

    这个压缩包中的"test"文件可能是一个测试目录或文件,通常包含HTML、CSS、JavaScript文件以及必要的图片和JSON数据文件,用于演示如何配置和使用ExtJS Tree控件。开发者可以通过查看这些文件来学习如何设置异步加载...

    Extjs4下的STOREMENU

    在ExtJS 4中,STOREMENU 是一种特定的功能,它将数据存储(Store)与菜单(Menu)相结合,提供了一种动态创建菜单项的方法,这些菜单项可以根据存储的数据进行更新。这种功能在需要根据用户权限或实时数据动态展示...

    Extjs4.0学习指南(中文)

    - 在 MyEclipse 中新建一个 Web 项目,命名为 `Extjs4`。 - 将解压缩后的 Extjs4.0 文件复制到项目的 `Webroot` 目录下。 - `Examples` 文件夹包含官方提供的示例代码,可作为学习参考。 - 部署并启动 Tomcat。 ...

    extjs4.x tabpanel 动态加载panel和html例子

    如果需要从服务器动态获取HTML内容,可以使用`Ajax`请求,并在成功回调中更新panel的`html`属性。 ```javascript Ext.Ajax.request({ url: 'your_server_url', // 服务器URL success: function(response) { ...

    ExtJS中文手册.pdf

    - **更多Widgets**:ExtJS还提供了许多其他类型的组件,如按钮、面板、标签页等。 #### 7. 使用Ajax - **异步通信**:ExtJS支持通过Ajax进行前后端的异步数据交换。 - **支持多种后端**:不仅支持PHP,还支持ASP...

    EXTjs4学习指南

    首先,要开始EXTJS4的学习,你需要获取EXTJS库。EXTJS的官方下载地址是http://extjs.org.cn/。下载后,将其解压缩,并将文件放入你的Web项目目录。例如,在使用MyEclipse和Tomcat的情况下,你可以创建一个新的Web...

    extjs4 学习指南 学习手册

    - **Ext.application**:这是EXTJS4中的主入口点,用于初始化应用程序。在上面的HelloWorld示例中,它创建了一个名为'HelloExt'的应用,并定义了一个启动函数launch。 5. **元素获取** - **Ext.get**:EXTJS 提供...

    extjs4.0技术

    - 在MyEclipse中新建一个Web项目,例如命名为 `Extjs4`。 - 将解压后的Extjs4.0文件夹中的所有文件复制到该项目的Webroot目录下。 3. **配置示例程序**: - `Examples` 文件夹包含了官方提供的示例程序,可以用于...

    extjs3.2api中文

    在ExtJS中,这个常量可能在以下几种场景中使用: 1. **图标渲染**:当一个组件(如按钮或菜单项)需要图标,但实际图标资源未能正确加载时,这个透明图片会显示,避免了空白或异常。 2. **延迟加载**:在某些动态...

    ExtJs代码自动生成

    在开发过程中,有时需要根据数据库结构或者业务需求自动生成相应的ExtJS代码,以提高开发效率和代码一致性。下面将详细解释如何使用ExtJS进行代码自动生成,以及各组件类型的中文解释。 1. **数据库字段的映射** ...

    extjs属性方法大全

    以上是 `Extjs` 中常用的表单类及其属性和方法的详细介绍,这些类和方法提供了丰富的功能,帮助开发者快速构建功能完备的 Web 表单应用。通过掌握这些基础知识,可以有效地提高开发效率并确保应用程序的质量。

Global site tag (gtag.js) - Google Analytics