AJAX 笔记1:如何开发原始的AJAX程序
来源:互联网 发布:最新搜片软件 编辑:程序博客网 时间:2024/05/21 01:28
AJAX ( Asynchronous JavaScript and XML ,异步 JavaScript 和XML )是一种进行页面局部异步刷新的技术。
用 AJAX 向服务器发送请求和获得服务器返回的数据并且更新到界面中,不是整个页面刷新,而是在 HTML 页面中使用 JavaScript 创建XMLHTTP Request 对象(就像WebClient对象,就是网页中的网页)来向服务器发出请求以及获得返回的数据,就像 JavaScript 版的 WebClient 一样,在页面中 由XMLHTTP Request 来发出 Http 请求和获得服务器的返回数据,这样页面就不会刷新 了。 XMLHTTP Request 是 AJAX 的核心对象,实现AJAX最终要借助于它。
如何开发AJAX程序:
开发一个 AJAX 功能需要开发服务端和客户端两块程序。以一个显示服务端时间为例。首先开发一个 GetDate1.ashx ,输出当前时间。在HTML 页面中放一个按钮,在按钮的 onclick 中创建 XMLHTTP 向GetDate1.ashx 发送请求,获得返回的数据并且显示到界面上。
案例:不用AJAX框架,写出一个AJAX程序(重点,面试常考)
第一步:创建一个GetDate1.ashx,用于返回服务器上的时间
<%@ WebHandler Language="C#" Class="GetDate1" %>using System;using System.Web;public class GetDate1 : IHttpHandler { public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/plain"; context.Response.Write(DateTime.Now.ToString());//返回服务器上的时间 } public bool IsReusable { get { return false; } }}
第二步:创建一个html页面(客户端的页面)
<html xmlns="http://www.w3.org/1999/xhtml"><head> <title></title> //核心代码,必须会写! <script type="text/javascript"> function btnClick() { ①: var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); //创建XMLHTTP对象,负责网页和服务器的一个页面之间通讯,相当于WebClient, //这一段if判断代码可有可无 if (!xmlhttp) { alert("创建xmlhttp对象异常!"); return false; } ②: xmlhttp.open("POST", "GetDate1.ashx?ts" + new Date(), false); //准备向服务器的GetDate1.ashx发出Post请求 ③ : //下面一段代码:注册事件 //XMLHTTP默认不是同步请求的,也就是open方法并不像WebClient的DownloadString那样把服务器返回的数据拿到才返回的, //XMLHTTP是异步的,因此需要监听onreadystatechange事件 xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState == 4) {//服务器xmlhttp有很多状态,当readyState为4的时候,表示服务器成功返回 if (xmlhttp.status == 200) {//如果状态码是200则是成功 document.getElementById("Text1").value = xmlhttp.responseText; } else { alert("AJAX服务器返回错误!"); } } } ④: xmlhttp.send(); //这才是开始发送请求 } </script></head><body> <input id="Text1" type="text" /> <input id="btnPost" type="button" value="获取时间" onclick="btnClick()"/></body></html>
还可以向服务器传参数:
可以在 xmlhttp.open 中向服务器传递参数: xmlhttp.open("POST", "GetDate1.ashx?id=1", false) ,如果传递给服务器的请求里有中文,则需要使用 Javascript 函数 encodeURI 来进行 URL 编码。
服务器端获取参数:
<%@ WebHandler Language="C#" Class="GetDate1" %>using System;using System.Web;public class GetDate1 : IHttpHandler { public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/plain"; string id=context.Request["id"];//服务器端获取参数 context.Response.Write(DateTime.Now.ToString()+"----"+id);//返回给客户端 } public bool IsReusable { get { return false; } }}
客户端传参数:
<html xmlns="http://www.w3.org/1999/xhtml"><head> <title></title> <script type="text/javascript"> function btnClick() { var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); //创建XMLHTTP对象,相当于WebClient //这一段if判断代码可有可无 if (!xmlhttp) { alert("创建xmlhttp对象异常!"); return false; } //加上时间字符串或者随机字符什么的避免服务器之发送缓存ts" + new Date(),如果不加的话,服务器会省事地给客户端发送缓存,这样客户端接收的东西是不会变的 //如果只传输非中文字符,则直接id=xxx即可。 xmlhttp.open("POST", "GetDate1.ashx?id="+encodeURI("中国")+"&ts" + new Date(), false); //准备向服务器的GetDate1.ashx发出Post请求 //下面一段代码:注册事件 //XMLHTTP默认不是同步请求的,也就是open方法并不像WebClient的DownloadString那样把服务器返回的数据拿到才返回的, //XMLHTTP是异步的,因此需要监听onreadystatechange事件 xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState == 4) { if (xmlhttp.status == 200) {//如果状态码是200则是成功 document.getElementById("Text1").value = xmlhttp.responseText; } else { alert("AJAX服务器返回错误!"); } } } xmlhttp.send(); //这才是开始发送请求 } </script></head><body> <input id="Text1" type="text" /> <input id="btnPost" type="button" value="获取时间" onclick="btnClick()"/></body></html>
案例2:用 AJAX 实现汇率转换。
页面放一个文本框(输入人民币)、一个下拉列表(美元,日元,港币)、一个按钮,点击按钮在一个 span 中显示转换后的金额。汇率计算在服务器端完成,假设汇率(人民币 / 外币): 7 、 0.1 、 0.9 。
服务器端:money.ashx
<%@ WebHandler Language="C#" Class="money" %>using System;using System.Web;public class money : IHttpHandler { public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/plain"; string amount = context.Request["amount"]; string moneytype = context.Request["moneytype"]; int Smount = Convert.ToInt32(amount); if (moneytype == "1")//美元 { context.Response.Write(Smount/7); } else if (moneytype == "2")//日元 { context.Response.Write(Smount*10); } else if (moneytype == "3")//港币 { context.Response.Write(Smount*10/9); } } public bool IsReusable { get { return false; } }}
客户端html(使用JQuary):
<html xmlns="http://www.w3.org/1999/xhtml"><head> <title></title> <script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script> <script language="javascript" type="text/javascript"> function Button1_onclick() { var amount = $("#Text1").val(); var moneytype = $("#Select1").val(); var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); //创建XMLHTTP对象,相当于WebClient //这一段if判断代码可有可无 if (!xmlhttp) { alert("创建xmlhttp对象异常!"); return false; } xmlhttp.open("POST", "money.ashx?amount=" + amount + "&moneytype=" + moneytype + "&ts" + new Date(), false); //准备向服务器的GetDate1.ashx发出Post请求 //下面一段代码:注册事件 //XMLHTTP默认不是同步请求的,也就是open方法并不像WebClient的DownloadString那样把服务器返回的数据拿到才返回的, //XMLHTTP是异步的,因此需要监听onreadystatechange事件 xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState == 4) { if (xmlhttp.status == 200) {//如果状态码是200则是成功 $("#Text2").val(xmlhttp.responseText); } else { alert("AJAX服务器返回错误!"); } } } xmlhttp.send(); //这才是开始发送请求 } </script></head><body> <input id="Text1" type="text" /> <select id="Select1"> <option value="1">美元</option> <option value="2">日元</option> <option value="3">港币</option> </select> <input id="Button1" type="button" value="button" onclick="return Button1_onclick()" /> <input id="Text2" type="text" /></body></html>
- AJAX 笔记1:如何开发原始的AJAX程序
- 最原始的AJAX
- struts2原始的ajax
- AJAX 的原始写法
- js原始版的ajax
- AJax的原始实现方法
- 原始的Ajax:直接使用XmlHttpRequest
- 比较完整的原始ajax写法
- 原始AJAX,即没有被封装的
- 最原始的ajax无刷新分页
- 原始ajax的基本实现步骤
- ajax的xml和json解析(原始)
- 快速开发Ajax程序
- 开发Ajax程序步骤
- J2EE下使用AJAX(一) 最原始的AJAX
- J2EE下使用AJAX(一) 最原始的AJAX
- J2EE下使用AJAX(一) 最原始的AJAX .
- 最原始最实用的ajax -基础通用ajax
- QTP中读取Excel表格中的数据
- SyntaxFromSQL创建语法dbname不帶table的原因
- Linux视频汇总
- 一千个是什么 - Windows消息机制(Windows Messaging)
- MySQL Linux常用命令
- AJAX 笔记1:如何开发原始的AJAX程序
- LoadRunner视频地址
- Linux alternatives命令
- 流
- 在RedHatLinux上部署web站点[jdk+tomcat+mysql]
- 布局管理器
- Linux操作系统下如何启动停止Oracle实例
- 字典树(边改边抄)
- MyEclipse解决编码问题