Ajax - 发送请求原理
1,什么是ajax?
Asynchronous JavaScript and XML(当然现在xml已经由json代替);
主要是用于前后台的交互(表单提交已经被废弃);
使用场景:前台获取数据、表单的失焦验证;
2,如何在有服务的环境下使用ajax发送请求
1.创建ajax对象-xmlhttprequest对象:(分为两种类型)
在新版本的浏览器中:variable=new XMLHttpRequest();
老版本的IE中:variable=new ActiveXObject("Microsoft.XMLHTTP");
所以在这里我们需要考虑到兼容性的问题:
var xhr;
if(window.XMLHttpRequest){ //常规,如果有,直接使用
xhr = new XMLHttpRequest();
}else{ //如果没有,老版本IE
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
console.log(xhr)
console.log("状态码:" + xhr.readyState);
console.log('响应码:' + xhr.status);
console.log('响应文本:' + xhr.responseText);
console.log('步骤一完成')
2.通过监听ajax的状态的改变来监听:
xhr.onreadystatechange = function(){
console.log('xhr的状态码发生了改变');
console.log("状态码:" + xhr.readyState);
console.log('响应码:' + xhr.status);
console.log('响应文本:' + xhr.responseText);
console.log('\n');
}
console.log('步骤二完成')
3.创建请求的消息,连接服务器
xhr.open('GET','07.php',true); //最后一个参数是bool,表示同步||异步,true异步
console.log('步骤三完成')
4.发送
xhr.send(null); //如果是post请求,就放post参数,如果是get请求,发送null就行了
5.附:
状态码:
0: 请求未初始化
1: 服务器连接已建立
2: 请求已接收
3: 请求处理中
4: 请求已完成,且响应已就绪
响应码:
1xx 信息类
2xx 成功 200
3xx 重定向 304
4xx 客户端错误 404
5xx 服务端错误
3,使用ajax发送get请求
html部分:
用户名:<input type="text" id="username">
<span id="ts"></span><br>
密码:<input type="text">
<button id="btn">验证用户名</button>
原生js部分:
<script>
var username = document.getElementById("username");
var btn = document.getElementById("btn");
var ts= document.getElementById("ts"); // 点击btn发送ajax请求
btn.onclick = function(){
// 1.创建xhr
var xhr;
if(window.XMLHttpRequest){ //常规,如果有,直接使用
xhr = new XMLHttpRequest();
}else{ //如果没有,老版本IE
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
// 2.绑定监听函数
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
if(xhr.status == 200){
console.log(xhr.responseText)
if(xhr.responseText == 1){
ts.innerHTML = "该用户名已经被注册"
}else if(xhr.responseText == 0){
ts.innerHTML = "该用户名可以使用"
} }
}
}
// 3.建立连接
xhr.open("GET","08.php?uname=" + username.value,true);
// 正则验证
// 4.发送请求
xhr.send(null)
} //get是直接可以在地址栏中调试
</script>
4,使用ajax发送post请求
html:
学生姓名:<input type="text" id="uname"><br>
学生成绩:<input type="text" id="score"><br>
<button id="btn">注册</button>
<p id="p01"></p>
原生js部分:
<script>
function get_id(id){
return document.getElementById(id);
} var uname = get_id("uname");
var score = get_id("score");
var btn = get_id("btn");
var p01 = get_id("p01"); var reg_name = /^[a-z]{3,10}$/g;
var reg_score = /^\d{1,2}$/g;
var uname_flag = false; uname.onfocus = function(){
reg_name.lastIndex = 0;
this.style.border = '1px solid #000'
uname_flag = false;
}
uname.onblur = function(){ if(reg_name.test(uname.value)){
this.style.border = '1px solid #0f0';
uname_flag = true;
}else {
this.style.border = '1px solid #f00'
}
} btn.onclick = function(){
if(uname_flag){
// 1.
var xhr;
if(window.XMLHttpRequest){ //常规,如果有,直接使用
xhr = new XMLHttpRequest();
}else{ //如果没有,老版本IE
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
// 2.
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
if (xhr.status == 200) {
console.log(xhr.responseText);
p01.innerHTML = xhr.responseText;
}
}
}
// 3.
xhr.open('POST','http://localhost:8888/0220ajax/09.php',true);
// 3.5 在发送post请求的时候,你得告诉服务器你发送的是一个什么
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
// 4.发送
xhr.send('strName=' + uname.value + '&strScore=' + score.value); }
}
</script>
5,使用jQuery—ajax发送get请求
用户名:<input type="text" id="username">
<span id="ts"></span>
<br>
密码: <input type="text">
<button id="btn">验证用户名</button>
$("#btn").click(function(){
$.ajax({
type : "GET",
url : "01.php?uname=" + $("#username").val(),
success : function(data){ //就是原生的xhr.responseText
console.log(data);
if(data == 0){
$("#ts").html("该用户名可以使用").css("color","green");
}else if(data == 1){
$("#ts").html("该用户名已被占用").css("color","red");
}
},
error : function(err){ //错误的
console.log(err)
}
})
})
6,使用jQuery—ajax发送post请求
(html部分与上面相同相同)
$("#btn").click(function(){
$.ajax({
type : "POST",
url : "http://192.168.9.154:8888/0221ajax/01.php",
data : {
uname : $("#username").val()
},
success : function(data){ //就是原生的xhr.responseText
console.log(data);
if(data == 0){
$("#ts").html("该用户名可以使用").css("color","green");
}else if(data == 1){
$("#ts").html("该用户名已被占用").css("color","red");
}
},
error : function(err){ //错误的
console.log(err)
}
})
})
参考: https://www.cnblogs.com/1234wu/p/10414973.html
Ajax - 发送请求原理的更多相关文章
- AJAX异步请求原理和过程
AJAX 指异步 JavaScript 及 XML(Asynchronous JavaScript And XML),它不是一种新的编程语言,而是一种使用现有标准的新方法. AJAX 基于 JavaS ...
- ajax发送请求跨域 - uri java代理
问题:ajax发送请求出现cors跨域 解决办法:可以通过java代理的方式,后台发送请求 1.get请求 public void proxyGet(String url) { try { URL r ...
- Ajax发送请求等待时弹出模态框等待提示
主要的代码分为两块,一个是CSS定义模态框,另一个是在Ajax中弹出模态框. 查看菜鸟教程中的模态框教程demo,http://www.runoob.com/try/try.php?filename= ...
- ajax对象。同步与异步及ajax发送请求
ajax对象的属性.方法 属性 readyState: Ajax状态码 * 0:表示对象已建立,但未初始化,只是 new 成功获取了对象,但是未调用open方法 1:表示对象已初始化,但未发送,调用了 ...
- Django——Ajax发送请求验证用户名是否被注册
场景: 用户注册的时候,输入用户名之后,Ajax发送请求到后端,后端验证该用户名是否已经被注册,然后返回到注册页面提示用户. 1.模型: from django.db import models cl ...
- Ajax服务请求原理 简单总结
刚开始以为Ajax是一种新的语言,接触之后才知道,ajax是用于服务器交换数据并更新部分网页的Web应用程序的技术. 第一次看到Ajax请求代码时,感觉一脸萌逼,这些代码竟然把后台数据请求过来了,神奇 ...
- ajax发送请求
首先创建XMLHttpRequest对象,利用此对象发送请求 主页面 <!doctype html> <html lang="en"> <head&g ...
- Ajax异步请求原理的分析
我们知道,在同步请求模型中,浏览器是直接向服务器发送请求,并直接接收.处理服务器响应的数据的.这就导致了浏览器发送完一个请求后,就只能干等着服务器那边处理请求,响应请求,在这期间其它事情都做不了.这就 ...
- 原生Ajax发送请求
ajax get&post 1.使用get发送请求,会有请求缓存 1)什么叫请求缓存,请求信息相同浏览器不会再向服务器发送请求,导致访问服务器失败. 2)解决:将随机数添加到请求路径后面参数 ...
随机推荐
- 查询和修改mysql最大连接数的方法
查询和修改mysql最大连接数的方法切换到mysql库里查询show variables like 'max_connections';show global status like 'Max_use ...
- Linux文件管理和编辑常用命令
Linux文件管理和编辑常用命令 mkdir 命令 功能说明 mkdir 命令用于创建一个目录,mkdir是make directory的缩写 格式: mkdir [选项] 目录名 mkdir 命令的 ...
- 大数据学习路线:Hadoop集群同步技术分享
今天给大家带来的技术分享是——Hadoop集群同步. 一.同步方式 选择一个机器,作为时间服务器(这里选择hadoop01),所有的机器与这台集群时间进行定时的同步,比如,每隔十分钟,同步一次时间. ...
- DOS下读取PCI配置空间信息的汇编程序(通过IOCF8/IOCFC)
汇编程序编写的读取PCI配置空间信息的代码(通过IOCF8/IOCFC): ;------------------------------------------------ ;功能: 读取PCI 配 ...
- powermock+mockito+testng 单元测试pom文件
0:Supported versions PowerMock version 1.7.0 and upper has experimental support of Mockito 2. A lot ...
- daemon进程fork一次和fork两次的区别?
守护进程也称为精灵进程(Daemon),是运行在后台的一种特殊的进程.它独立于控制终端并且周期性的执行某种任务负等待处理某些发生的事件.因为他们没有控制终端,所以说他们是在后台运行的. 守护进程的特点 ...
- ssh 工具
ssh 使用 rsa key 实现无密码访问 server A 要用 rsa key 验证的方式访问 server B 在A上创建/root/.ssh/目录 > chmod -R 700 /ro ...
- mysql同步之otter/canal环境搭建完整详细版
接上一篇mysql 5.7多源复制(用于生产库多主库合并到一个查询从库). 这一篇详细介绍otter/canal环境搭建以及当同步出现异常时如何排查.本文主要参考https://blog.csdn.n ...
- 解决c1xx fatal error C1083 Cannot open source file
在项目开发过程中,遇到一个问题,一个工程B导入另外一个工程A的生产代码,出现这个错误,最后查阅资料发现是文件路径太深,导致文件路径字符超过了217字符. 写了一个测试Demo来验证: 一.新建Win3 ...
- 【python002-设计小游戏】
用python设计第一个游戏 一.运行idle的快捷方式:F5 二.首先设计一款小游戏: print('-------开启python学习之旅--------')temp = input(" ...