`
huiqinbo
  • 浏览: 333244 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

无废话ExtJs 系列教程十七[数据交互:AJAX]

阅读更多

1.代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>    
    <title>My JSP 'index.jsp' starting page</title>

	<!--ExtJs框架开始-->
	<script type="text/javascript" src="Ext/adapter/ext/ext-base.js"></script>
	<script type="text/javascript" src="Ext/ext-all.js"></script>
	<link rel="stylesheet" type="text/css" href="Ext/resources/css/ext-all.css" />
	<!--ExtJs框架结束-->	
	<!-- 	 
	<script type="text/javascript" src="study/helloWorld.js"></script>
	<script type="text/javascript" src='study/window.js'></script>
	<script type="text/javascript" src='study/formPanel.js'></script>
	<script type="text/javascript" src='study/textField.js'></script>
	<script type="text/javascript" src='study/button.js'></script>
	<script type="text/javascript" src='study/login.js'></script>
	-->	
	<!--调用/study/ajax.js   -->
	<script type="text/javascript" src="Ext/src/locale/ext-lang-zh_CN.js"></script><!--中文日期翻译-js-->
	<script type="text/javascript" src="study/kindeditor/kindeditor.js"></script>
	<script type="text/javascript" src='study/ajax.js'></script>
	
	<style type="text/css">
		.loginicon
		{
			background-image: url(study/login.gif) !important;
		}
	</style>
	<style type='text/css'>
		.x-form-unit
		{
			height:22px;
			line-height:22px;
			padding-left:2px;
			display:inline-block;
			display:inline;
		}
	</style>
	
  </head>  
  <body>
  	<!--------------------- 上层 -->
  	<!-- 这里使用ContainerLayout: 垂直方式布局  -->
  	<div id='ContainerLayout' style='float:left;width:300px'></div>
  	<!-- padding-left 是用来填充间隔,如果没有则两个容器/组件会完全挨着 -->
  	<div id='hello' style='float:left;width:300px;padding-left: 10px'></div>
  	<div id='right-upward' style='float:left;width:700px;padding-left:15px'></div>
  	
  	
  	<!--------------------- 中间------------------------------------>
  	<div id='BorderLayout' style='padding: 20px 0px 0px 0px;clear:both'></div>
  	
  	
  	<!--------------------- 底层------------------------------------>
  	<div id='accordionLayout' style='float:left;padding:20px 0px;width:300px;height:200px'></div>
  	<!-- 两个Panel渲染同一div,不会相互覆盖,会上下依次显示 -->
  	<div id='fitLayout' style='float:left; padding:20px 0px 0px 20px;height:30px'></div>
  	<!-- 表格布局 -->
  	<div id='tableLayout' style='float:left; padding:20px 0px 0px 20px;height:30px;width:100px'></div>
  </body>
</html>

 

2. ajax.js 代码如下:

Ext.onReady(function(){
	//创建Panel
	var panel = new Ext.Panel({
		title:'Ajax与数据显示',
		width:400,
		height:350,
		style:'margin:30px',
		bodyStyle:'padding: 10px 0px 10px 30px',
		frame:true		
	});
	
	/* 
	 * 配置项URL:
	 * url:'./study/sample.json', 	//这里原本应该请求地址,如:/../ajax.do ,为了快速学习,暂时先指定一个json文件,我是通过看EXT3.0 API  url: 'ajax_demo/sample.json', 学习的:-D
	 * 这里的url的值不能是声明的变量(如url:urlData 或url:'urlData')!必须是地址路径!
	 * 
	 * 
	 * 配置项PARAMS:
	 * params: { id: 1 }参数,我们在做内容页时,经常会这样使用“根据编号取出详细信息”,这个参数在本例中并没有实际意义,在这里只显示用法。
	 * 
	 * 
	 * 配置项SUCCESS:
	 * success: function (response, options) {}成功时执行方法。这里有两个参数:
	 * (1)response:服务端返回的数据,通过response.responseText来获得XMLHttpRequest的数据,并通过Ext.util.JSON.decode方法把字符串转换成json对象。
	 * (2)options:向服务端发送的对象。
	 * 
	 * 
	 *<--------------以下是对日常函数里的参数是什么,怎么查看该参数做出解析------------------------->
	 * 我们在开发中,经常会遇到这样的问题,就是不知道参数是做什么用的,传的是什么,当我们 alert(parm)的时候,弹出的是[Object]或是[Object][Object]。
	 * 那么我们怎么样知道他到底传的是什么呢?我在上页的代码中写了这样的程序:
	 * for (i in options) {
 	 *      alert('options参数名称:' + i);
         *      alert('options参数[' + i + ']的值:' + options[i]);
	 * }
	 * 对象我们不知道的对象 options 我们用 for 语句进行遍历,看看对象里存的是什么,这样就可以判断对象是什么了。
	 * for(){}:不知属性个数时,用于对某个对象的所以属性进行循环操作,返回字符串形式的属性名,获取属性值方式。
	 * 那如果,我们的子对象还是 Object 怎么办?
	 * for (i in options) {
	 * 		alert('options参数名称:' + i);
	 * 		alert('options参数[' + i + ']的值:' + options[i]);
	 * 		//方式一,判断子对象类型,如果是object则继续遍历子对象
	 * 		if (typeof (options[i]) == 'object') {
	 * 			for (j in options[i]) {
	 * 				alert('子对象名称:' + j);
	 * 				alert('子对象值:' + options[i][j]);
	 * 			}
	 * 		}
	 * }
	 * //方式二,options[i].toSource(),查看对象源码。
	 * //语法:object.toSource() 注:该方法在 Internet Explorer 中无效。
	 * <----------------------------------结束----------------------------------------->
	 * 
	 */
	
	//var urlData = {id:1,name:'张三',brithday:2001-01-01,height:178,sex:'0',discribe:'张三是一个.net软件工程师<br />现在正在学习ExtJs。'}
	
	//获取数据
	Ext.Ajax.request({				//创建一个AJAX请求!	//系统加载时就会调用它!不受Window组件影响, 所以不需要New
		url:'./study/sample.json', 	
		method: 'post',
		params: {id:1},				
		
		success: function (response, options) {		//成功时执行的函数!  		
//			alert(response)
//		    for (i in response) {					//完全可以没有以下for循环, 只为让自己和大家看清楚,Ajax是在页面加载时就会被优先加载进来
//		        alert('options参数名称:' + i);
//				alert('options参数[' + i + ']的值:' + response[i]);
//				if(typeof(response[i])=='object'){
//					for(j in response[i]){
//						alert('子对象:'+j);
//						alert('子对像['+j+']的值:' + response[i][j]);
//					}
//				}
//		    }
		    var responseJson = Ext.util.JSON.decode(response.responseText);		//把字符串转换成json对象
		    alert(responseJson);
		    template.compile();								//编译模板。
		    template.overwrite(panel.body, responseJson);	//把数据填充到模板中。
		},
		failure:function(){
			alert('系统出错,请联系管理人员...');		//当url找不到路径及函数里面出错时会在这里提示给用户
		}
	});
	
	
	//创建模板对象,常用于数据显示,也就是我们在开发中提到的“内容页或详细页”。
	var template = new Ext.XTemplate(
			'<table id="template">',
				'<tr><td>Number:</td><td>{id}</td></tr>',	//中间的{id}占位符要和我们在后台输出 json 对象对应。
				'<tr><td>Name:</td><td>{name}</td></tr>',
				'<tr><td>Birthday:</td><td>{brithday}</td></tr>',
				'<tr><td>Height:</td><td>{height}</td></tr>',
				'<tr><td>Sex:</td><td>{sex}</td></tr>',
				'<tr><td valign="top">Discribe</td><td>{discribe}</td></tr>',
			'</tabel>'
	);
	
	new Ext.Window({
		title:'Window',
		id:'window',
		width:476,
		height:476,
		modal:true,
		closable:true,
		minimizable:true,
		maximizable:true,
		items:[panel]				//注这里也可直接写items:panel,因为只一个参数,当两个参数时items:[panel,xxx]
	}).show();
});

 

3. 效果如下:

 

 

 

 注1,  当url值错误时页面:

Ext.Ajax.request({				//创建一个AJAX请求!	//系统加载时就会调用它!不受Window组件影响, 所以不需要New
		url:'./study/sample.json', 	//如果这里url的值不是路径,而是一个具体值时的结果如下:

 

 

注2, 查看参数时的页面:

日常函数里的查看参数是什么,怎么查看该参数?
alert('options参数名称:' + i);
alert('options参数[' + i + ']的值:' + response[i]);



 

  • 大小: 198.2 KB
  • 大小: 212.5 KB
  • 大小: 211.9 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics