JavaScript的原生Ajax解析
通过JavaScript的Ajax进行详细的解析过程,从而更好的了解Jquery的Ajax。
顺带,我会在后面把我整理的一整套CSS3,PHP,MYSQL的开发的笔记打包放到百度云,有需要可以直接去百度云下载,这样以后你们开发就可以直接翻笔记不用百度搜那么麻烦了。
笔记链接:http://pan.baidu.com/s/1qYdQdKK 密码:pvj2
一、JavaScript原生ajax
1.原生ajax代码:
window.onload=function(){
var oBtn = document.getElementById("btn");
oBtn.onclick=function(){
//打开浏览器
/*
1.创建一个ajax对象
ie6以下 ActiveXObject('Microsoft.XMLHTTP')
*/
var xhr = null;
// window属性下的XMLHttpRequest 是否存在 不存在就执行else 存在就直接执行,为的是兼容IE6
/* if(window.XMLHttpRequest){
var xhr = new XMLHttpRequest();
}else{
var xhr = new ActiveXObject('Microsoft.XMLHTTP');
}*/
// 最好用下面的方法考虑兼容
try{
// 代码尝试执行这个块中的内容,如果有错误,则执行catch{},并且传入错误信息
var xhr = new XMLHttpRequest();
}catch(e){
var xhr = new ActiveXObject('Microsoft.XMLHTTP');
}
// 在地址栏输入地址
/*
open()方法
*/
xhr.open('get','1.txt',true);
// 提交
xhr.send();
// 等待服务器返回内容
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
alert(xhr.responseText);
}
}
}
}
html:
<input type="button" value="按钮" id="btn">
2.表单
表单:数据的提交
action : 数据提交的地址,默认是当前页面
method : 数据提交的方式,默认是get方式
1.get
把数据名称和数据值用=连接,如果有多个的话,那么它会把
多个数据组合用&进行连接,然后把数据放到url?后面传到指定页面
url长度限制的原因,我们不能通过get方式传递过多的数据
2.post
理论上无限制
enctype : 提交的数据格式,默认application/x-www-form-urlencoded <form action="" method="">
<input type="text" name="user">
<input type="text" name="age">
<input type="submit" value="提交">
</form>
3. open()方法
代码:xhr.open('get','1.txt',true);
参数
1.打开方式
2.地址
3.是否异步[true为异步,false为同步]
异步:非阻塞 [前面的代码不会影响后面的代码执行]
同步:阻塞 [前面的代码会影响后面的代码执行]
阻塞:
<script src="jquery.js"></script>
$(function(){}) //如果Jque.js没有引用下面的文件执行也不得用,就阻塞了 非阻塞:
setTimeout(function(){
alert(1);
},2000); alert(2);
// 弹出2不会对我有影响,就非阻塞
同步和异步区别:
当你后续的代码需要用到前面的东西的时候,你可以用同步,但异步用的多
4. send()发送请求
xhr.send();
5.请求状态监控
onreadystatechange事件
・readyState属性:请求状态
-0(初始化)还没有调用open()方法
-1(载入)已调用send()方法,正在发送请求
-2(载入完成)send()方法完成,已收到全部响应内容
-3(解析)正在解析响应内容
-4(完成)响应内容解析完成,可以在客户端用了
・status属性:服务器(请求资源)的状态
・返回的内容
-responseText:返回以文本形式存放的内容
-reponseXML:返回XML形式的内容 代码分析:
// 等待服务器返回内容
/*
readyState : ajax工作状态
responseText : ajax请求返回的内容就被存在这个属性下面
on readystate change : 当readyState改变的时候触发
status : 服务器状态 http状态码
*/
xhr.onreadystatechange = function(){ if(xhr.readyState == 4){
// 状态值为200 ok的时候
if(xhr.status == 200){
alert(xhr.responseText);
}else{
alert('出错了,Err:'+xhr.status);
}
}
}
6.数据请求和获取源码
window.onload=function(){
var oBtn = document.getElementById("btn");
// 用了setInterval()定时更新数据
oBtn.onclick=setInterval(function(){
// 打开浏览器,启用xml请求
try{
var xmh = new XMLHttpRequest();
}catch(e){
var xmh = new ActiveXObject('Microsoft.XMLHTTP');
}
// 在地址栏输入地址
xmh.open('get','test.php',true);
// 发送请求
xmh.send();
// 等待服务器返回内容
xmh.onreadystatechange=function(){
if(xmh.readyState == 4){
// 以下是关键方法 JSON.parse();
if(xmh.status == 200){
// JSON.parse()将 JavaScript 对象表示法 (JSON) 字符串转换为对象
var data = JSON.parse(xmh.responseText);
var oUl = document.getElementById("ul1");
var html = "";
for(var i=0;i<data.length;i++){
// 因为是二维数组所以需要这样写[i]['title']
html += '<li><a href="">'+data[i]['title']+'</a> <span>'+data[i]['date']+'</span></li>'
}
oUl.innerHTML = html;
}else{
// 弹出status的状态错误
alert("出错,Err:"+xmh.status);
}
// alert(xmh.responseText);
}
}
},1000);
}
后台test.php文件代码:
<?php
// 用数组的格式传数据过去
$arr = array(
array('title'=>'菠萝的海df,很美','date'=>'2015-6'),
array('title'=>'菠萝的海d,很美a','date'=>'2015-6'),
array('title'=>'菠萝的海,很美s','date'=>'2015-6'),
array('title'=>'菠萝的海d,很美s','date'=>'2015-6'),
array('title'=>'的海x,很美x','date'=>'2015-6'),
array('title'=>'菠萝海,很美','date'=>'2015-06'),
array('title'=>'菠萝的海,很美s','date'=>'2015-6')
);
// json_encode 用来把数据转换成json格式
echo json_encode($arr);
?>
7.get方法解析
/*
1.缓存 在url 后面连接一个随机数,时间戳
2.乱码 编码encodeURI
输出中文:+encodeURI('刘伟')+
*/
// 在地址栏输入地址
xmh.open('get','getNews.php?username='+encodeURI('刘伟')+'&pass=bbb&'+new Date().getTime(),true);
后台php用$_GET['']方法获取数据
php代码:
<?php
$username = $_GET['username'];
$pass = $_GET['pass']; echo "欢迎,你的名字:{$username},密码:{$pass}";
?>
8.post方法解析
/*
post方式,数据放在send()里面作为参数传递
*/
// 申明发生的数据编码类型
xmh.setRequestHeader('content-type','application/x-www-form-urlencoded');
// post没有缓存问题,get有缓存问题所以需要更新
// 中文也不用编码 get方式要编码encodeURI
xmh.send('username=leo&pass=222');
HTML部分:
<li>
<div>
<img src="data:images/1.png" alt="good">
<p>森今夏浓浓的森女风来袭!柔软舒适的面料,柔和的粉蓝和白色,领口绑带,穿起来仙气十足!</p>
</div>
</li>
<li>
<div>
<img src="data:images/1.png" alt="good">
<p>森今夏浓浓的森女风来袭!柔软舒适的面料,柔和的粉蓝和白色,领口绑带,穿起来仙气十足!</p>
</div>
</li>
<li>
<div>
<img src="data:images/1.png" alt="good">
<p>森今夏浓浓的森女风来袭!柔软舒适的面料,柔和的粉蓝和白色,领口绑带,穿起来仙气十足!</p>
</div>
</li>
<li>
<div>
<img src="data:images/1.png" alt="good">
<p>森今夏浓浓的森女风来袭!柔软舒适的面料,柔和的粉蓝和白色,领口绑带,穿起来仙气十足!</p>
</div>
</li>
<li>
<div>
<img src="data:images/1.png" alt="good">
<p>森今夏浓浓的森女风来袭!柔软舒适的面料,柔和的粉蓝和白色,领口绑带,穿起来仙气十足!</p>
</div>
</li>
JavaScript的原生Ajax解析的更多相关文章
- 用javascript写原生ajax(笔记)
AJAX 的全名叫做 Asynchronous JavaScript and XML(异步的 JavaScript 和 XML).它最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并 ...
- javascript实现原生ajax
自从javascript有了各种框架之后,比如jquery,使用ajax已经变的相当简单了.但有时候为了追求简洁,可能项目中不需要加载jquery这种庞大的js插件.但又要使用到ajax这种功能该如何 ...
- javascript实现原生ajax的几种方法介绍
自从javascript有了各种框架之后,比如jquery,使用ajax已经变的相当简单了.但有时候为了追求简洁,可能项目中不需要加载jquery这种庞大的js插件.但又要使用到ajax这种功能该如何 ...
- javascript实现原生ajax的方法
<script> var xmlHttp; function createxmlHttpRequest() { if (window.ActiveXObject) { xmlHttp = ...
- javascript js原生ajax post请求 实例
HTML代码: 注意: xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencod ...
- 原生ajax解析&封装原生ajax函数
前沿:对于此篇随笔,完是简要写了几个重要的地方,具体实现细节完在提供的源码做了笔记 <一>ajax基本要点介绍--更好的介绍ajax 1. ajax对象中new XMLHttpReques ...
- 根据JavaScript中原生的XMLHttpRequest实现jQuery的Ajax
基本介绍 XmlHttpRequest XmlHttpRequest是JavaScript中原生的,历史悠久的一种发送网络请求的方案. 基本上所有前端框架对于网络请求的部分都是基于它来完成的. 在本章 ...
- ASP.NET学习笔记(5)——原生Ajax基本操作
说明(2017-11-4 15:32:49): 1. 回北京后又快一个月了,上次在家写的下回预告,到底是没把加水印写完,而且这次也不想写.. 2. 上次许的愿,十月份看完asp.net,已经泡汤了,翻 ...
- 浅谈JavaScript中的Ajax
引言 作为一名WEB开发者,我想Ajax技术是一定需要掌握的.你也许平时没有使用JavaScript真正的写过Ajax.但是你一定使用过JQuery里面的相关函数来进行异步调用.今天我们就来介绍下原生 ...
随机推荐
- 不同目录存在相同名称的py文件,执行时,报错的解决方法
1.问题现象如下,执行时报错 imported module 'test_case_execution' has this __file__ attribute platform win32 -- ...
- solr -创建 core
需要进入solr安装目录的bin 里,solr start 启动 后,才可以生成core solr create -c [core的名字] 如:solr create -c mycore1 生成位置在 ...
- PyCharm撤消/恢复
PyCharm在撤消/重做的每个步骤之前移动插入符号,然后执行撤消/重做操作. 要撤消操作,请执行以下操作之一: 在主菜单上,选择Edit | Undo. 按Ctrl+Z. 要恢复操作,请执行以下操作 ...
- “伏魔”赏金 | WebShell检测之「模拟污点引擎」首次公测,邀你来战!
安全是一个动态的过程,攻防对抗如同在赛博世界里降妖伏魔,其要义是:取彼之长,补己之短.--伏魔引擎的诞生 伏魔引擎挑战赛 注册时间: 2022.01.10 00:00:00 - 2022.01.24 ...
- 额外空间复杂度O(1) 的二叉树遍历 → Morris Traversal,你造吗?
开心一刻 一天,有个粉丝遇到感情方面的问题,找我出出主意 粉丝:我女朋友吧,就是先天有点病,听不到人说话,也说不了话,现在我家里人又给我介绍了一个,我该怎么办 我:这个问题很难去解释,我觉得一个人活着 ...
- vue2如何根据不同的环境配置不同的baseUrl
在正常的开发中,通常我们需要在线上的测试环境中运行代码来检查是否有些线上才会出现的bug或者是问题.每次去特意的修改我们的baseUrl显然是不现实的,而且说不定哪天忘记了估计会被大佬喷死 首先,这是 ...
- gorm中的高级查询
智能选择字段 GORM 允许通过 Select 方法选择特定的字段,如果您在应用程序中经常使用此功能,你也可以定义一个较小的结构体,以实现调用 API 时自动选择特定的字段,例如: type User ...
- logrotate 日志切割
logrotate是一个日志文件管理工具.用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到"转储"作用. 配置文件 Linux系统默认安装logrotate工具,它默认 ...
- ping: Network is unreachable
问题 [root@web-1 yum.repos.d]# ping baidu.com ping: unknown host baidu.com [root@web-1 yum.repos.d]# p ...
- threejs - src - WebGLProgram是如何组建Shader的?
threejs - src - WebGLProgram是如何组建Shader的? WebGLProgram的构建 WebGLProgram构建的时候需要的参数如下: // \param render ...