Web前端-Ajax基础技术(下)
Web前端-Ajax基础技术(下)
你要明白ajax
是什么,怎么使用?
ajax
,web
程序是将信息放入公共的服务器,让所有网络用户可以通过浏览器进行访问。
浏览器发送请求,获取服务器的数据:
地址栏输入地址,表单提交,特定的href
或src
属性。
<script>
var xhr = new XMLHttpRequest();
xhr.open('GET', 'test.php');
xhr.send()
xhr.onreadystatechange = function() {
if(this.readyState != 4) return
var res = JSON.parse(this.responseText);
// res 服务器返回的数据
var data = res.data;
for(var i = 0; i<data.length; i++){
}
}
ajax
上手:
// 创建一个XMLHttpRequest类型的对象
var xhr = new XMLHttpRequest();
// 打开一个网址的连接
xhr.open('GET', './time.php');
// 发送一次请求
xhr.send(null);
// 处理网页呈现后的操作
xhr.onreadystatechange = function() {
if(this.readyState === 4) {
console.log(this);
}
}
readyState
0 xhr被创建,未调用open()方法
1 open()方法被调用,建立了连接
2 send()方法被调用,可以获取状态行和响应头
3 响应体下载中,responseTest属性可能已经包含部分数据
4 响应体下载完成,直接使用responseText
http
请求:
// 设置请求报文的请求行
xhr.open('GET', './time.php');
// 设置请求头
xhr.setRequestHeader('Accept', 'text/plain');
// 设置请求体
xhr.send(null);
xhr.onreadystatechange = function() {
if(this.readyState === 4) {
// 获取响应状态码
console.log(this.status);
// 获取响应状态描述
console.log(this.statusText);
// 获取响应头信息
console.log(this.getResponseHeader('Content-Type')); // 指定响应头
console.log(this.getAllResponeseHeaders()); // 全部响应头
// 获取响应体
console.log(this.responseText) // 文本形式
console.log(this.responseXML) // xml
}
}
post
请求:
var xhr = new XMLHttpRequest();
// open方法的第一个参数作用, 设置请求的method
xhr.open('POST', './add.php');
// 设置请求体格式
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send('key=value');
xhr.onreadystatechange = function() {
if(this.readyState === 4) {
console.log(this.responseText);
}
}
异步同步:
// 异步
console.log('before ajax');
var xhr = new XMLHttpRequest();
xhr.open('GET', './time.php', true);
xhr.send(null);
xhr.onreadystatechange = function() {
if(this.readyState === 4){
console.log('request done');
}
}
console.log('after ajax');
// 同步
console.log('before ajax');
var xhr = new XMLHttpRequest();
xhr.open('GET', './time.php', false);
xhr.send(null);
xhr.onreadystatechange = function() {
if(this.readyState === 4){
console.log('request done');
}
}
xhr.send(null);
console.log('after ajax');
响应类型:
var xhr = new XMLHttpRequest();
xhr.open('GET', 'test.php');
xhr.send();
// 请求代理对象,响应类型
xhr.responseType = 'json';
xhr.onreadystatechange = function() {
if(this.readyState != 4) return;
console.log(this);
}
服务器响应,使用 XMLHttpRequest
对象的responseText
或responseXML
属性。
responseText
获取字符串形式的响应数据,responseXML
获取xml
形式的响应数据。
responseText
document.getElementById("myDiv").innerHTML = xmlhttp.responseText;
var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
模板引擎:
artTemplate: https://aui.github.io/art-template/
art-template
是一个简约,超快的模板引擎,采用作用域声明的技术来优化模板渲染速度。
安装:
npm install art-template --save
下载:
lib/template-web.js
<script src="template-web.js" >
</script>
// 封装
function ajax(method, url, params) {
var xhr = new XMLHttpRequest();
xhr.open(method, url);
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
params = params || null;
xhr.send(params);
xhr.onreadystatechange=function(){
if(this.readyState != 4) return
console.log(this.responseText);
}
}
ajax('GET', 'time.php', 'key=value');
function ajax(method, url, params) {
var xhr = new XMLHttpRequest();
if(method === 'GET'){
url += "?" + params;
}
xhr.open(method, url);
var data = null;
if(method === 'POST') {
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
data = params
}
xhr.send(data);
xhr.onreadystatechange=function(){
if(this.readyState != 4) return
console.log(this.responseText);
}
}
// 传对象
function ajax(method, url, params) {
var xhr = new XMLHttpRequest();
if(typeof params === 'object'){
var tempArr = [];
for(var key in params){
var value = params[key];
tempArr.push(key + "=" + value);
}
params = tempArr.join('&');
}
if(method === 'GET'){
url += "?" + params;
}
xhr.open(method, url);
var data = null;
if(method === 'POST') {
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
data = params
}
xhr.send(data);
xhr.onreadystatechange=function(){
if(this.readyState != 4) return
console.log(this.responseText);
}
}
function ajax(method, url, params, done) {
method = method.toUpperCase();
var xhr = new XMLHttpRequest();
if(typeof params === 'object'){
var tempArr = [];
for(var key in params){
var value = params[key];
tempArr.push(key + "=" + value);
}
params = tempArr.join('&');
}
if(method === 'GET'){
url += "?" + params;
}
xhr.open(method, url, false);
var data = null;
if(method === 'POST') {
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
data = params
}
xhr.onreadystatechange=function(){
if(this.readyState != 4) return
// console.log(this.responseText);
done(this.responseText);
}
xhr.send(data);
}
var ondone = function(res) {
console.log(res);
}
回调:
<script>
function foo() {
setTimeout(function(){
return Date.now();
}, 1000);
}
var time = foo()
</script>
jquery
中的ajax
。
https://www.jquery123.com/category/ajax/
function ajax(method, url, params, done) {
// 统一转换大写
method = method.toUpperCase();
// urlencoded
var pairs = [];
for(var key in params) {
pairs.push(key+"="+params[key]);
}
var querystring = pairs.join('&');
var xhr = window.XMLHttpRequest?new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
xhr.addEventListener('readystatechange',function(){
}
}
<script src="jquery.js"></script>
<script>
$.ajax('./time.php', {
type: 'post', // method 请求方法
success: function(res) {
console.log(res);
}
}
</script>
$.ajax({
url: 'time.php',
type: 'post',
data: { id: 1, name: '张三' },
success: function(res) {
console.log(res);
}
})
$.ajax({
url: 'json.php',
type: 'get',
dataType: 'json',
success: function(res) {
console.log(res)
}
})
ajax
回调事件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script src="jquery.js"></script>
<script>
$.ajax({
url: 'time.php',
type: 'get',
beforeSend: function(xhr) {
console.log('beforeSend', xhr);
},
success: function(res) {
console.log(res);
},
error: function(xhr) {
console.log(xhr);
},
complete: function(xhr) {
console.log(xhr);
}
})
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script src="jquery.js"></script>
<script>
var xhr = new XMLHttpRequest();
xhr.open('get','time.php');
xhr.send()
xhr.onreadystatechange = function() {
if(this.readyState != 4) return
console.log(this.responseText);
}
</script>
</body>
</html>
<script src="jquery.js"></script>
<script>
$.get('time.php', function(res){
console.log(res);
})
$.get('time.php', { id: 1 }, function(res) {
console.log(res);
})
$.post('time.php', { id: 1 }, function(res) {
console.log(res);
})
</script>
.ajaxComplete()
当ajax请求完成后注册一个回调函数
.ajaxError()
ajax请求出错
.ajaxSend()
ajax请求发送之前绑定一个要执行的函数
.ajaxStart()
在ajax请求刚开始时执行一个处理函数
.ajaxStop()
在ajax请求完成时执行一个处理函数
.ajaxSuccess()
绑定一个函数当ajax请求成功完成时执行
jQuery.ajax()
执行一个异步的http(ajax)请求
jQuery.ajaxPerfilter()
在每个请求之前被发送和$.ajax()处理它们前处理
jQuery.ajaxSetup()
为以后要用到的ajax请求设置默认的值
jQuery.ajaxTransport()
创建一个对象
jQuery.get()
使用一个http get请求从服务器加载数据
jQuery.getJSON()
jQuery.getScript()
GET请求从服务器加载并执行一个 JavaScript 文件
jQuery.post() 请求从服务器加载数据
跨域:
同源,域名,协议,端口,完全相同,同源的相互通过ajax
的方式进行请求。
不同源地址之间,不能相互发送ajax
请求。
$.get('http://', function(res) {
console.log(res);
})
<!DOCTYPE html>
<head>
<meta charset = "UTF-8">
<title>AJAX基础回顾</title>
</head>
<body>
<script>
var xhr = new XMLHttpRequest();
xhr.open('GET', 'test.php');
xhr.responseType='json';
xhr.onreadystatechange = function() {
if(this.readyState !== 4) return
console.log(this.response);
}
</script>
</body>
</html>
$.get('http://...', function(res){
console.log(res);
})
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"/>
<meta http-equiv="Content-Language" content="zh-cn"/>
<meta name="robots" content="all"/>
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"/>
var link = document.createElement('link');
link.rel = 'stylesheet';
link.href = 'http//...';
document.body.appendChild(link);
var script = document.createElement('script');
script.src = 'http://...';
document.body.appendChild(script);
jsonp
原理:
json
是借助script
标签发送跨域请求的技巧。
原理是在客户端借助script
标签请求服务端的一个动态网页,服务端的这个动态网页返回一段带有函数调用的javascript
全局函数调用的脚本,将原本需要返回给客户端的数据传递进去。
$.ajax({
url: 'http://...',
dataType: 'json',
success: function(res) {
console.log(res);
}
})
结言
好了,欢迎在留言区留言,与大家分享你的经验和心得。
感谢你学习今天的内容,如果你觉得这篇文章对你有帮助的话,也欢迎把它分享给更多的朋友,感谢。
作者简介
达叔,理工男,简书作者&全栈工程师,感性理性兼备的写作者,个人独立开发者,我相信你也可以!阅读他的文章,会上瘾!,帮你成为更好的自己。长按下方二维码可关注,欢迎分享,置顶尤佳。
Web前端-Ajax基础技术(下)的更多相关文章
- Web前端-Ajax基础技术(上)
Web前端-Ajax基础技术(上) ajax是浏览器提供一套的api,用于向服务器发出请求,接受服务端返回的响应,通过javascript调用,实现通过代码控制请求与响应,实现网络编程. ajax发送 ...
- 网络统计学与web前端开发基础技术
网络统计学与web前端开发基础技术 学习web前端开发基础技术(网页设计)需要了解:HTML.CSS.JavaScript三种语言.下面我们就来了解一下这三门技术在网页设计中的用途: HTML是网页内 ...
- Web前端-JavaScript基础教程下
Web前端-JavaScript基础教程下 <script>有6个属性: async对外部脚本有效,可以用来异步操作,下载东西,不妨碍其他操作. charset为src属性指定字符集. d ...
- 学习web前端开发基础技术需要掌握:HTML、CSS、JavaScript语言
1. HTML是网页内容的载体.内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字.图片.视频等. 2. CSS样式是表现.就像网页的外衣.比如,标题字体.颜色变化,或为标题加入背景图片. ...
- Web前端开发基础 第一天(Html和CSS)
学习web前端开发基础技术需要掌握:HTML.CSS.JavaScript语言.下面我们就来了解下这三门技术都是用来实现什么的: 1. HTML是网页内容的载体.内容就是网页制作者放在页面上想要让用户 ...
- Web前端之基础知识
学习web前端开发基础技术须要掌握:HTML.CSS.Javascript 1.HTML是网页内容的载体 内容就是网页制作者放在页面上想要让用户浏览的信息,能够包括文字.图片.视频等. 2.CSS样式 ...
- Web前端-JavaScript基础教程上
Web前端-JavaScript基础教程 将放入菜单栏中,便于阅读! JavaScript是web前端开发的编程语言,大多数网站都使用到了JavaScript,所以我们要进行学习,JavaScript ...
- web前端各大技术都能实现什么功能
web前端各大技术都能实现什么功能 以下是孜然为你总结的web前端开发你必须要一项一项掌握的技术:Html.css.ajax.jquery.extjs.JavaScript,今天为你详细解读他们各自都 ...
- 最适合2018年自学的web前端零基础系统学习视频+资料
这份资料整理花了近7天,如果感觉有用,可以分享给更有需要的人. 在看接下的介绍前,我先说一下整理这份资料的初衷: 我的初衷是想帮助在这个行业发展的朋友和童鞋们,在论坛博客等地方少花些时间找资料,把有限 ...
随机推荐
- Maven Scope 依赖范围
Maven依赖范围就是用来控制依赖与这三种classpath(编译classpath.测试classpath.运行classpath)的关系,Maven有以下几种依赖范围: ·compile:编译依赖 ...
- css基础--深入理解弹性盒flex布局
欢迎访问我的个人博客:http://www.xiaolongwu.cn 1. 前言 flex弹性盒,是一种布局方式,当页面需要适应不同的屏幕大小以及设备类型时,它依然能确保元素 拥有更恰当的排布行为, ...
- JaveScript基础(3)之正则表达式
1.创建正则表达式的两张方法: A.var reg=/pattern/; 注意:斜杠内不能加单引号或双引号 B.vae reg=new RegExp('pattern'); 注意:括号内要用单引号括 ...
- Spring Boot使用RestTemplate消费REST服务的几个问题记录
我们可以通过Spring Boot快速开发REST接口,同时也可能需要在实现接口的过程中,通过Spring Boot调用内外部REST接口完成业务逻辑. 在Spring Boot中,调用REST Ap ...
- R画网络图
R 画网络图 目的:用R做生信分析,画基因样本的网络图,从中观察样本的致病性情况. 一.所用到的包 library(tidyr) library(ggplot2) library(reshape2) ...
- Mybatis配置文件SqlMapConfig.xml中的标签
SqlMapConfig.xml配置文件中的属性 1 配置内容 properties(属性) settings(全局配置参数) typeAliases(类型别名) typeHandlers(类型处理器 ...
- MySQL(二)MySQL的安装和简单使用
1.MySQL产品的介绍 MySQL数据库属于MySQL AB公司,总部位于瑞典,后被Oracle收购. 优点: (1)成本低:开放源代码,可以免费使用 (2)性能高:执行很快 (2)简单:很容易安装 ...
- C++使用类和对象
1. 内置函数 程序调用函数时需要一定的时间和空间开销,其执行过程一般如下: 而C++提供了一种高效率的方法,即在编译的时候将所调用函数的代码直接嵌入到主函数中,而不是将流程转出去,这样可以避免函数调 ...
- 下载恒星源码使用vs2015运行配置
需要安装PostgreSQL 配置安装路径下的include 项目 右键→属性 在启动项目项目中配置 右键→属性→展开连接器→输入
- Django中模板过滤器总结
一.形式:小写: {{ name | lower }} 二.串联:先转义文本到HTML,再转换每行到 <p> 标签: {{ my_text|escape|linebreaks } 三.过滤 ...