手写AJAX事例

Ajax在本质上是一个浏览器端的技术

Ajax技术之主要目的在于局部交换客户端及服务器间之数据,主要使用XMLHttpRequest来与服务器交互

创建XMLHttpRequest对象

在IE、Firefox、safari和Opera中创建该对象的JavaScript代码为:

var xhr = new XMLHttpRequest();

在IE5/6中代码为:

var xmlRequest = new ActiveXObject(“Microsoft.XMLHTTP”);

设置异步对象参数并发送请求

1.GET方式

1.1设置参数

xhr.open("GET", "GetAreasByAjax.ashx?isAjax=1", true);

1.2GET方式请求可以设置浏览器不使用缓存

xhr.setRequestHeader("If-Modified-Since", "0");

1.3发送: xhr.send(null);//GET方式

2.POST方式:

1.1设置参数:xhr.open("POST", "GetAreasByAjax.aspx", true);

1.2添加请求头:xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); //使用POST方式必需添加此请求头

1.3发送:xhr.send("isAjax=1&na=123");//POST方式

设置回调函数

异步使用XMLHttpRequest对象时,必须使用:onreadystatechange事件

使用模式:

创建该对象;-new

设置readystatechange事件触发一个回调函数; -onreadystatechagne

打开请求;-open

发送请求;-send

注:在回调函数中检查readyState属性,看数据是否准备就绪(是否等于4)

异步对象readyState属性

0:未初始化。new完后;

1:已打开。对象已经创建并初始化,但还未调用send方法

2:已发送。已经调用send 方法,但该对象正在等待状态码和头的返回;

3:正在接收。已经接收了部分数据,但还不能使用该对象的属性和方法,因为状态和响应头不完整;

4:已加载。所有数据接收完毕

示例:

//创建异步对象

var xhr = new XMLHttpRequest();

//设置请求参数(请求方式,请求url,是否异步)

xhr.open("get","FirsAjax.ashx",true);

//清空缓存

xhr.setRequestHeader("If-Modified-Since", "0");

//设置回调函数

xhr.onreadystatechange=function(){

//1表示开始发送请求报文,2表示发送完毕,3表示开始接收响应报文4,表示接收完毕

if(xhr.readyState==4) {

alert(xhr.responseText);

}

}

//发送请求报文 如果是Get类型则为null

xhr.send(null);

注:如果是POST方式则需要加入以下代码

xhr.setRequestHeader("Context-Type","application/x-www-form-urlencoded");

注:在URL参数中添加"&"参数 encodeURLComponent("&");

XMLHttpRequest常用方法

abort() 取消请求

open() 需要使用多个参数,第一个设置方法属性,第二个设置目标URL,第三个指定是同步(false)还是异步(true)发送请求

send() 发送请求到服务器

setRequestHeader() 添加定义HTTP头到请求

getAllResponseHeaders() 获取Http响应并没有的整个列表

getResponseHeader() 仅获取指定的http响应头

XMLHttpRequest常用属性

onreadystatechange 返回或设置异步请求的事件处理程序

readyState 返回状态码: 0 未初始化 1 打开 2 发送 3 正在接收 4 已加载

responseText 使用字符串返回HTTP响应体

responseXML 使用XML dom对象返回HTTP响应

status 返回HTTP状态码

Json--B/S结构数据传递格式

AJAX数据传输标准为JSon, json是js对象的一个字面量表示法.

C#中将.Net对象序列化为Json字符串的方法:

JavaScriptSerializer jss = new JavaScriptSerializer();

jss.Serialize(p),

JavaScriptSerializer在System.Web.Extensions.dll中

完整:System.Web.Script.Serialization.JavaScriptSerializer

在JavaScript中:

函数名后如果有圆括号,意思就是将函数的返回值赋给等号左边的变量;

没有圆括号,是将函数本身赋给等号前的变量。

异步对象不支持跨域访问

使用Jsons解决;:

<script type="text/javascript>

function acceptJson(jsonObj) {

alert(jsonObj.name);

}

<script src="http://www.baidu.com/1.aspx" /> //跨域请求

acceptJson({id:1, name:‘jim‘}) //1.aspx返回的JS代码

<script type="text/javascript">

window.onload = function () {

document.getElementById("login").onclick = function () {

var xhr = createXhr();

var name = document.getElementById("txtName");

var pwd = document.getElementById("txtPwd");

xhr.open("post", "PH/Login.ashx", true);

xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

xhr.onreadystatechange = function () {

if (xhr.readyState == 4) {

var res = xhr.responseText;

if (res == "ok") {

alert("登陆成功!");

window.location = "Index.htm";

}

else {

alert("用户名或密码错误");

}

}

}

var data = "name=" + name.value + "&pwd=" + pwd.value + (gel("remember").checked ? "&remember=1" : "");

xhr.send(data);

}

}

</script>

时间: 2024-10-05 03:13:43

手写AJAX事例的相关文章

.net学习之Session、Cookie、手写Ajax代码以及请求流程

1.IIS 7 以上版本集成了两种模式,一种是经典模式,一种是集成模式(直接将asp.net框架集成到IIS中) 2.浏览器和服务器端通过什么技术来实现的?Socket(套接字),通信的语法是HTTP协议,也就是请求报文和响应报文 3.浏览器请求asp.net页面实际是请求的asp.net页面里的ProcessRequest方法 4.请求一般处理程序时,找到ashx页面后台类ashx.cs,创建类对象并调用ProcessRequest方法,生成响应报文体,发回浏览器 5.post表单提交方式:数

一套手写ajax加一般处理程序的增删查改

倾述下感受:8天16次驳回.这个惨不忍睹. 好了不说了,说多了都是泪. 直接上代码 : 这个里面的字段我是用动软生成的,感觉自己手写哪些字段太浪费时间了,说多了都是泪 ajax.model层的代码: using System; namespace Ajax.Model { /// <summary> /// SM_Class:实体类(属性说明自动提取数据库字段的描述信息) /// </summary> [Serializable] public partial class SM_C

怎么手写Ajax实现异步刷新

所谓的异步刷新,就是不刷新整个网页进行更新数据. 只有通过js才能实现Ajax,进而实行异步刷新 表单提交数据和Ajax提交数据的区别:表单提交是提交的整个页面中的数据,提交数据之后会抛弃之前的页面(刷新页面):ajax是在当前页面提取某些数据并提交出去,并能接收返回来的数据,处理之后进而显示在当前页面(不刷新页面). [例子]==验证用户名是否重复== 使用Ajax的思路:在要刷新的页面中写js和Ajax代码,把数据提交给另一个页面,在Page_Load中写查询代码并把结果返回到刷新的页面.

手写原生ajax

关于手写原生ajax重要不重要,各位道友自己揣摩吧, 本着学习才能进步,分享大家共同受益,自己也在自己博客里写一下 function createXMLHTTPRequest() { //1.创建XMLHttpRequest对象 //这是XMLHttpReuquest对象无部使用中最复杂的一步 //需要针对IE和其他类型的浏览器建立这个对象的不同方式写不同的代码 var xmlHttpRequest; if (window.XMLHttpRequest) { //针对FireFox,Mozill

vue10行代码实现上拉翻页加载更多数据,纯手写js实现下拉刷新上拉翻页不引用任何第三方插件

vue10行代码实现上拉翻页加载更多数据,纯手写js实现下拉刷新上拉翻页不引用任何第三方插件/库 一提到移动端的下拉刷新上拉翻页,你可能就会想到iScroll插件,没错iScroll是一个高性能,资源占用少,无依赖,多平台的javascript滚动插件.iScroll不仅仅是 滚动.它可以处理任何需要与用户进行移动交互的元素.在你的项目中包含仅仅4kb大小的iScroll,你的项目便拥有了滚动,缩放,平移,无限滚动,视差滚动,旋转功能.iScroll的强大毋庸置疑,本人也非常欢迎大家使用iScr

手把手集成web端手写公式功能

何为手写公式,很简单,就是在网页上可以写出数学公式,并能够生成Latex格式的字符串.废话不多说,直接走正题. 一.首先大家可以先去官网了解一下myscript这个插件 官方网站:https://dev.myscript.com/ 二.在去它的github上看一下这个项目 GitHub:https://github.com/MyScript/myscript-math-web 三.根据github上的介绍,要下载其插件首先你需要用到这个命令: bower install myscript-mat

自己手写的自动完成js类

在web开发中,为了提高用户体验,会经常用到输入框的自动完成功能,不仅帮助用户进行快速输入,最重要的是帮助那些“记不全要输入什么”的用户进行选择.这个功能有很多插件已经实现了,为了适应项目的特殊需求,决定自己编写一个具备通用性.扩展性和灵活性的自动完成类,就当是边写边学习了,一举两得.该功能是比较简单的,核心是数据获取方式和导航的实现,简单写了一个,经测试非常好用,还有很多地方需要修改和改进,例如:在原型中只暴露init方法即可,其他方法都需要放到私有空间内,不让用户访问到,这个以后再完善吧.啥

Android 手写Binder 教你理解android中的进程间通信

关于Binder,我就不解释的太多了,网上一搜资料一堆,但是估计还是很多人理解的有困难.今天就教你如何从 app层面来理解好Binder. 其实就从我们普通app开发者的角度来看,仅仅对于android应用层的话,Binder就是客户端和服务端进行通信的媒介. AIDL就是我们理解Binder 最好的事例. 我们都知道 我们写好aidl 文件以后,开发工具 会自动帮我们生成好代码.实际上 我们最终apk里面 是只有这些代码的,我们写的aidl文件 是不会被打包进去的,也就是说aidl文件 实际上

手写promise

写在前面: 在目前的前端分开中,我们对于异步方法的使用越来越频繁,那么如果处理异步方法的返回结果,如果优雅的进行异步处理对于一个合格的前端开发者而言就显得尤为重要,其中在面试中被问道最多的就是对Promise方法的掌握情况,本章将和大家一起分析和完成一个Promise方法,希望对你的学习有一定的帮助. 了解Promise 既然我们是要模仿ES6的Promise,那我们必然要知道这个方法主要都是用来干什么的,有哪些参数,有什么特性,为什么要使用Promise及如何使用等等. 为什么要使用它? 1.