1 ajax原理

	Ajax(Asynchronous JavaScript and XML (异步的JavaScript和XML)),是一种快速创建
动态网页的技术,目的是显示动态局部刷新.通过XMLHttpResponse对象来向服务器发起异步请求,从服务器获取数据.
(1) 异步的javascript: 使用javaScript语言及功能向服务器发起请求,当服务器处理完请求之后,自动执行
javaScript回调函数.(客户端可以不需要等到服务器响应才能运行)
(2) XML是一种标记语言,是ajax与后台交互传输数据格式之一
(3) ajax只能向同源网站发起Http请求(端口,协议,域名都相同),跨域请求会报错 利用Ajax可以实现:
1 注册时,输入用户名自动检测该用户是否存在
2 登录时提示密码用户名错误
3 页面局部进行更新数据

2 XMLHttpResponse基本属性

(1) onreadystatechange  每次状态改变所触发事件的时间处理程序
(2) responseText 从服务器响应返回字符串形式数据
(3) responseXML 从服务器响应返回以XML(DOM兼容文档)数据对象
(4) response 从服务器返回对象:如json对象
(5) timeout 表示多少毫秒后,如果请求仍然没有得到结果,就会自动终止 附: response类型由XMLHttpRequest.responseType属性的值决定
'': 字符串
'document': Document对象
'json': json对象(django中间件解析)
'text': 字符串
'blob': Blob对象,适合读取二进制文件 var ajax = new XMLHttpRequest();
ajax.open('GET', 'http://www.example.com/page.php', true);
var data = ajax.responseText;
data = JSON.parse(data); 将json字符串转json对象 var last=JSON.stringify(obj) 将json对象转字符串

3 ajax状态码

200, OK,访问正常
301, Moved Permanently,永久移动
302, Move temporarily,暂时移动
304, Not Modified,未修改
307, Temporary Redirect,暂时重定向
401, Unauthorized,未授权
403, Forbidden,禁止访问
404, Not Found,未发现指定网址
500, Internal Server Error,服务器发生错误

4 设置监听接口

onloadstart  请求发出
onprogress 正在发送和加载数据
onerror 请求失败
onload 请求成功完成
ontimeout 用户指定的时限到期,请求还未完成
onloadend 请求完成,不管成果或失败

5 ajax解析

  • 第一步,创建ajax对象

    • 高级浏览器,包括火狐、chrome、opera,ie7以上
      var xhr = new XMLHttpRequest();
  • 使用XMLHttpRequest对象的open创建请求

    /*参数说明:

      method:该参数用于指定HTTP的请求方法,一共有get、post、head、put、delete五种方法
,常用的方法为get和post。
URL:该参数用于指定HTTP请求的URL地址,可以是绝对URL,也可以是相对URL。
该文件可以是任何类型的文件,比如 .txt 和 .xml,或者服务器脚本文件,比如 .asp 和 .php(在传回响应之前,能够在服务器上执行任务)。
flag:该参数为可选参数,参数值为布尔型。该参数用于指定是否使用异步方式。
true表示异步方式、false表示同步方式,默认为true。
name:该参数为可选参数,用于输入用户名。如果服务器需要验证,则必须使用该参数。
password:该参数为可选参数,用于输入密码。
XMLHttpRequest.open(method,URL,flag,name,password);
  xhr.open('get','2.py?username=tom&pwd=123');
  • 如果是get请求,参数需要附加到url里

  • 第三步,发送请求

    • 如果是get请求,send参数可以为空;
    • 如果为post请求,参数必须在send参数中传递,参数格式和url中设置的一样
    • 如果为post方式需要在send前,设置请求头信息:xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
    //get方式
xhr.send(null); //post方式 xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded');
xhr.send('username=tom&pwd=123');
  • 第四步,监听Ajax状态变化

    向服务器发送请求的目的是为了获得服务器端的数据,要获得服务器端返回的数据,需要监听XMLHttpRequest的状态,每当XMLHttpRequest状态发生改变时,会触发事件onreadystatechange,我们可以编写onreadystatechange事件处理函数,获取服务器返回的数据。

    • XMLHttpRequest对象的状态,可以通过属性readyState获取,公有以下5种状态:
    - 0: 请求未初始化
- 1: 服务器连接已建立
- 2: 请求已接收
- 3: 请求处理中
- 4: 请求已完成,且响应已就绪
  • 当readyState值为4时,就可以获取返回数据了,但返回的数据是成功还是失败,需要根据http的状态码确定,XMLHttpRequest的status属性用于判断http的状态,200表示访问成功
        xhr.onreadystatechange = function () {
if (4 == xhr.readyState) {
if (200 == xhr.status ) {
alert(xhr.responseText);
}
}
};
  • 第五步,获取响应数据

    • 可以通过XMLHttpRequest对象的responseText获取数据,现在已经不再使用responseXML获取数据了
    • 客户端获取json数据
 xhr.onreadystatechange = function () {
if (4 == this.readyState && 200 == this.status) {
//1.通过eval将json字符串转换为对象
// var obj = eval('('+xhr.responseText+')');
// console.log(obj); //2 使用json.parse将json字符串转换为对象
obj = JSON.parse(this.responseText);
console.log(obj);
}
};
  • JSON字符串和JSON对象的转换
        //json字符串 ==> json对象
var obj = JSON.parse(json字符串); //或者
var obj = eval('(' + json字符串 + ')'); //json对象转json串
var str=obj.toJSONString();
//或
var str=JSON.stringify(obj);

6 原生javascript中ajax

{1}  同步ajax请求,get请求:

#定义一个触发函数fresh_code
function fresh_code() {
let xhr = new XMLHttpRequest()
xhr.open('get', '/api/v1/regist_code', false); false代表同步,true代表异步请求
xhr.send()
let regist_code = xhr.responseText
// 把注册码写到regist_code标签中
let regist_code_span = document.getElementById('regist_code')
regist_code_span.innerHTML = regist_code
} {2} 异步ajax请求,get请求: var xhr = new XMLHttpRequest();
// 指定通信过程中状态改变时的回调函数
xhr.onreadystatechange = function(){
// 通信成功时,状态值为4,状态码为200
if (xhr.readyState === 4 && xhr.status === 200) {
//xhr.response指接收到的responseText字符串
var data=JSON.parse(xhr.responseText);
console.log(data)
}
else {
console.error(xhr.statusText);
}
}
};
xhr.onerror = function (e) {
console.error(xhr.statusText);
};
// open方式用于指定HTTP动词、请求的网址、是否异步
xhr.open('GET', '/endpoint', true);
// 发送HTTP请求
xhr.send(null); {3} 同步ajax请求,post请求 var name = encodeURI("北京西");
var data = "username=" + name + "&password=123";
//调用send()函数
send(data); function send(arg) {
//调用创建对象函数
CreateXMLHttpRequest();
xmlhttp.onreadystatechange = callhandle;
//get写法(请求方式,url,同步或异步)直接拼接到url,发送
//xmlhttp.open("GET","Default.aspx?goback=yes&arg=" + arg,true);
//post写法(请求方式,url,同步或异步),需要额外设置请求头
xmlhttp.open("POST", "http://172.16.5.25:9011/dynamicStation/loginByAdmin", true);
//设置content-type类型
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");
xmlhttp.send(arg);
} function CreateXMLHttpRequest() {
#创建xmlhttp对象,进行判定
if (window.ActiveXObject) {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
}
}

7 jquery中ajax

$.ajax({
#请求方式
type:'get',
url:'/studentsinfo',
#请求格式为json
dataType:'json',
#处理函数
success:function(data,status){
console.log(data)
var d=data['data']
for(var i=0;i<d.length;i++){
document.write('<p>'+d[i][0]+'</p>')
}
}
})
也可以直接使用$get 或者 $post 基本类似ajax的调用,只是在请求方式这块不用指定,原理一致!!

今天就分享到这了,喜欢的小伙伴可以点下推荐哦!!非常感谢!!

浅析ajax原理与用法的更多相关文章

  1. [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...

  2. Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数:  ...

  3. AJAX原理总结

    AJAX全称 Asynchronous JavaScript and XML(异步的JavaScript 和XML) 同步和异步 异步传输是面向字符的传输,单位是字符 同步传输是面向比特,单位是帧,传 ...

  4. 什么是ajax,ajax原理是什么 ,优缺点是什么

    AJAX工作原理及其优缺点   1.什么是AJAX?AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是一种创建交互式网页应用的网页 ...

  5. Nmap扫描原理与用法

    Nmap扫描原理与用法 1     Nmap介绍 Nmap扫描原理与用法PDF:下载地址 Nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Audit ...

  6. 转载 : Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结 投稿:jingxian 字体:[增加 减小] 类型:转载 时间:2013-11-14我要评论 本文是 ...

  7. ajax原理图解

    Ajax 原理图解 摘自: http://www.nowamagic.net/ajax/ajax_PicForAjaxPrinciple.php Ajax其实已经使用很久了,但一直也没有时间正经的找本 ...

  8. Ajax原理一篇就够了

    Ajax原理一篇就够了 一.什么是Ajax Ajax(Asynchronous JavaScript and XML的缩写)是一种异步请求数据的web开发技术,对于改善用户的体验和页面性能很有帮助.简 ...

  9. 封装ajax原理

    封装ajax原理 首先处理 用户如果不传某些参数,设置默认值 type默认get 默认url为当前页 默认async方式请求 data数据默认为{} 处理用户传进来的参数对象 遍历,拼接成key=va ...

随机推荐

  1. [坑况]——windows升级node最新版本报错【npm install -g n】

    我本来是下载一个vue-cli的,然后技术日新月异,告知我要先把我的node升级到8以上(目前是v6.1.13) 升级就升级,升级就报错 尝试第一种方法,网上最多的一种方法,估计也是成功最多的一种吧( ...

  2. Bear and Friendship Condition-HZUN寒假集训

    Bear and Friendship Condition time limit per test 1 secondmemory limit per test 256 megabytesinput s ...

  3. Ubuntu 下命令安装 ZooKeeper

    先去 http://mirrors.hust.edu.cn/apache/zookeeper/ 查看自己想要下载的版本 使用 wget 命令去下载 wget http://mirrors.hust.e ...

  4. Scala编程入门---数组操作之数组转换

    使用yield和函数式编程转换数组 //对Array进行转换,获取的还是Aarry val a = Array(1,2,3,4,5) val a2 = for(ele <- a) yield e ...

  5. Key-Value Store Indexer(Lily HBase Indexer) 小型采坑

    环境: Cloudera Express 5.12.1 JDK 1.8.0_92 CentOS 7 步骤1:数据导入到Hbase中(非正题,跳过) hbase中表为allDoc,两个Family:fu ...

  6. 利用Python脚本悄无声息的遥控室友电脑开机密码!

    整蛊一下室友就行了,切勿用于非法用途! 利用python脚本控制室友windows系统电脑的开机密码.利用random()生成随机数(密码),天知地知,密码只有你自己知道! Python代码分为cli ...

  7. Django REST framework+Vue 打造生鲜超市(七)

    目录 生鲜超市(一)    生鲜超市(二)    生鲜超市(三) 生鲜超市(四)    生鲜超市(五)    生鲜超市(六) 生鲜超市(七)    生鲜超市(八)    生鲜超市(九) 生鲜超市(十) ...

  8. python_日历

    >>> import datetime>>> Today=datetime.date.today()>>> Todaydatetime.date( ...

  9. 6个常见的php安全攻击

    1.SQL注入 SQL注入是一种恶意攻击,用户利用在表单字段输入SQL语句的方式来影响正常的SQL执行.还有一种是通过system()或exec()命令注入的,它具有相同的SQL注入机制,但只针对sh ...

  10. linux 用户空间与内核空间——高端内存详解

    摘要:Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对 ...