通过一个例子了解Ajax
Ajax指的Asyncronous JavaScript and XML
Ajax并不是什么新的编程语言, 它是现有一些东西的应用.从它的名称中就可以看出来
假如我们设想, 浏览器展示了一个页面,但需要更新其中小部分信息,这些信息依赖用户输入,又需要和服务器交互, 因为要和服务器交互, 但是其实还是在这个页面(url), 所以再重新加载整个HTML其实很浪费, 所以出现了Ajax
Ajax就是在JavaScript中, 后台做Http请求, 可以是异步的也可以是同步的, 然后动态更新显示页面. 当然这个过程我们感觉不太到,因为地址栏并不会有任何变化.
Ajax涉及的东西:
- JavaScript
- HTTP
其实就只有这两个
再具体一点:
- XMLHttpRequest (是JavaScript Object), 后台发送HTTP请求
- JavaScript DOM , 修改HTML来展示信息
- HTTP请求和服务器交互
一个例子
比如一个常用的Ajax用途是在注册的时候校验邮箱是否被注册,或用户名是否已存在,用户不用等到整个form都填写完提交才知道是否是已被注册.
<form action=" " method="post">
<input type="text" id="email_register" name="email" onblur="check_email(this.value)" />
</form>
比如这样一个页面, 有一个<form>, 我们再输入邮箱后, 它就会去校验这个邮箱是否被注册了
给<input>绑定一个blur事件, 失去焦点的时候触发
check_email函数:
function check_email(email){
ajax_request = new XMLHttpRequest();
ajax_request.onreadystatechange=function(){
if (ajax_request.readyState==4 && ajax_request.status==200){
var result = eval(ajax_request.responseText);
if (result.status == 'False'){
alert("email registered");
}
}
} ajax_request.open("GET", '192.168.12.192:8088/accounts/apiValidRegAddress?type=email&address=' + email, true);
ajax_request.send();
}
可以看到用javascript做一个Ajax请求的接口,流程
- 初始化一个XMLHttpRequest对象 ajax_request.
- 给ajax_request写一个readystatechange函数, 每次其readyState改变的时候会被调用
- open()
- send()
GET请求的send()不带参数, 对于POST请求,要发送的数据放在send()的参数中, 如果上面使用POST
ajax_request.send(type="email", address=email);
注意到我们这行语句:
if (ajax_request.readyState==4 && ajax_request.status==200)
XMLHttpRequest的readyState可以取值0~4, 记录当前请求所处的阶段
- 0: request not initialized
- 1: server connection established
- 2: request received
- 3: processing request
- 4: request finished and response is ready
当readyState为4, 也就是收到服务器回应时, 服务器当然是做了一个HTTP应答, status记录服务器HTTP应答状态码, 比如
- 200 OK
- 404 页面缺失
[学习] : XMLHttpRequest是JavaScript的一个类,它也是一个标准, 更多的学习, 参考XMLHttpRequest的API
上面例子页面的完整代码
<html>
<head>
<script>
function checkEmail(email){
var mailPattern = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
if (!mailPattern.test(email)){
alert("invaid email : " + email);
} else {
ajax_request = new XMLHttpRequest();
ajax_request.onreadystatechange=function(){
if (ajax_request.readyState==4 && ajax_request.status==200){
var result = eval("("+ajax_request.responseText+")");
if (result.status == false){
alert("email registered");
}
}
}
ajax_request.open("GET", '/accounts/apiValidRegAddress?type=email&address=' + email, true);
ajax_request.send(); }
}
</script>
</head> <input type="text" onblur="checkEmail(this.value)"/>
</html>
在checkEmail()中做了一个邮箱地址是否合法的正则检查
我在自己的Django项目中,加入了这个页面这个页面来测试, 上面那个Ajax接口是我们已经实现了的,检查用户输入的手机或邮箱是否被注册了.
页面截图:
JQuery的Ajax
jquery有一系列和Ajax相关的函数,其中最主要的是 jquery.ajax()
语法
- jquery.ajax([setting])
setting就是一系列的参数,比如
- type 'GET' or 'POST'
- url 请求的url
- data 传递到服务器的数据, key/value的形式
- sucess 请请求成功的回调函数, 参数是整个ajax调用返回的数据, 并且已经根据 dataType转成了相应的类型
- dataType 预计的调用返回数据的类型, 如 'json'
比如上面的例子,用ajax来写就是
jquery.ajax(type='GET',
url = '/accounts/apiValidRegAddress',
data={'type':'email', 'address': email},
dataType='json',
sucess = function(result){
if (result.status == false){
alert('email registered');
}
})
--------------------------
参考:
w3cshools的教程
http://www.w3schools.com/ajax/
mozilla development network
http://mdn.beonex.com/en/AJAX.html
通过一个例子了解Ajax的更多相关文章
- Webpack入门——使用Webpack打包Angular项目的一个例子
2016.1.22,对大多数人来说,这是一个非常平常的日子,但这却是我决定在博客园写博客的日子.虽然注册博客园的博客已有4年8个月,却一直没有动手写过一篇博客,原因是觉得自己水平不行,写不出好东西,所 ...
- spring笔记--使用springAPI以及自定义类 实现AOP的一个例子
Spring的另一个重要思想是AOP,面向切面的编程,它提供了一种机制,可以在执行业务前后执行另外的代码,Servlet中的Filter就是一种AOP思想的体现,下面通过一个例子来感受一下. 假设我们 ...
- ReCap 360 photo照片建模技术的又一个例子
这是我做的又一个利用Autodesk ReCap 360 照片建模技术做的一个例子.你可以下载模型自己把玩,或者下载原始照片自己试一试. 拍摄工具: 小米手机 照片数量:约120张 后期处理工具: p ...
- 从一个例子中体会React的基本面
[起初的准备工作] npm init npm install --save react react-dom npm install --save-dev html-webpack-plugin web ...
- 用thinkphp写的一个例子:抓取网站的内容并且保存到本地
我需要写这么一个例子,到电子课本网下载一本电子书. 电子课本网的电子书,是把书的每一页当成一个图片,然后一本书就是有很多张图片,我需要批量的进行下载图片操作. 下面是代码部分: public func ...
- Erlang 程序引发共享内存 bug 的一个例子
虽然 Erlang 的广告说得非常好,functional.share-nothing.消息传递,blah blah 的,好像用 Erlang 写并发程序就高枕无忧了,但是由于 Erlang 信奉高度 ...
- 对Jena的简单理解和一个例子
本文简单介绍Jena(Jena 2.4),使用Protégé 3.1(不是最新版本)创建一个简单的生物(Creature)本体,然后参照Jena文档中的一个例子对本体进行简单的处理,输出本体中的Cla ...
- 使用flume的一个例子
新项目中需要使用到hadoop和vertica,使用flume把数据加载到hadoop中,我做了一个例子, 即监控一个sharefolder,如果里面有文件,则会文件load到hadoop. 开启Fl ...
- 第三十六课:如何书写一个完整的ajax模块
本课主要教大家如何书写一个完整的ajax模块,讲解的代码主要跟ajax有关,而jQuery的ajax模块添加了Deferred异步编程的机制,因此对ajax的理解难度增大,还是忽略掉.但是我要讲解的代 ...
随机推荐
- R中使用rvest爬取数据小试
总结R中使用 xpath 和 css selectors 获取标签内容(xpath功能强大,而CSS选择器通常语法比较简洁,运行速度更快些) 例:抓取下面标签的内容: <h3 class=&qu ...
- TensorFlow 的softmax实例理解
对于理论,简单的去看一下百度上的说明,这里直接上实例,帮助理解. # softmax函数,将向量映射到0-1的范围内,P=exp(ax)/(sum(exp(a1x)+exp(a2x)+...)) in ...
- zabbix修改Template OS Linux模版使已使用内存(Used memory)更准确
说明: [root@coolnull ~]# free -m total used free shared buffers cached Mem: 995 785 209 0 6 92 -/+ buf ...
- iOS UITextField实时监听获取输入内容,中文状态去除预输入拼音
http://blog.csdn.net/cse110/article/details/51360796 - (void)textFieldDidChange:(UITextField *)textF ...
- pandas2
1.Series创建的方法统一为pd.Series(data,index=)(1,2,3)Series可以通过三种形式创建:python的dict.numpy当中的ndarray(numpy中的基本数 ...
- Python开发【Tornado】:搭建文件下载服务、音频文件播放
Tornado 如何做文件下载 要求:浏览器输入url地址,直接弹窗提示下载 Tornado服务端,搭建文件下载服务 #!/usr/bin/env python # -*- coding:utf-8 ...
- 【Pyton】【小甲鱼】正则表达式(一)
正则表达式学习: >>> import re >>> re.search(r'FishC','I love FishC.com!') <_sre.SRE_Ma ...
- [py][mx]django邮箱注册的验证码部分-django-simple-captcha库使用
邮箱注册-验证码 验证码使用第三方库django-simple-captcha 这个安装图形插件步骤官网有哦 - 1.Install django-simple-captcha via pip: pi ...
- jconsole监控远程 spring boot程序
监控java 程序 增加启动参数 java \ -Djava.rmi.server.hostname=192.168.1.97 \ -Dcom.sun.management.jmxremote \- ...
- Py中的多维数组ndarray学习【转载】
转自:http://blog.sciencenet.cn/home.php?mod=space&uid=3031432&do=blog&id=1064033 1. NumPy中 ...