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

最新文章

  1. iOS之深拷贝与浅拷贝
  2. [Java面试六]SpringMVC总结以及在面试中的一些问题.
  3. 【代码笔记】iOS-短信分享
  4. java框架篇---spring IOC依赖注入
  5. FreebuF黑客专访系列之吴翰清(刺):接下来几年,有两样东西必定会火
  6. BackgroundWorker组件学习
  7. 函数WideCharToMultiByte() 详解
  8. Andriod中绘(画)图----Canvas的使用详解
  9. ADO.NET与Oracle(一):获取多行记录集
  10. 网易云课堂_程序设计入门-C语言_第四周:循环控制_2念整数
  11. java学习之字符流与字节流的转换
  12. 模块化手机project ara之我见
  13. rebase
  14. [one day one question] Vue数组变更不能触发刷新
  15. Java-IO之ByteArrayOutputStream
  16. 《java入门第一季》之Date类案例,算一算你的恋爱纪念日
  17. Linux - Ubuntu 图形界面入门
  18. Microsoft .NET Framework 3.5 离线安装方法 (仅适用于Win8以上的系统)
  19. 从底层谈WebGIS 原理设计与实现(六):WebGIS中地图瓦片在Canvas上的拼接显示原理
  20. VMware + LInux + Xshell 连接环境设置(心得体会)

热门文章

  1. 20165215 2017-2018-2 《Java程序设计》第7周学习总结
  2. 性能测试工具Locust,一个开源性能测试工具
  3. jenkins1
  4. JustOj 1927: 回文串
  5. Codeforce 296A - Yaroslav and Permutations
  6. sping的quartz设置定时任务
  7. Prometheus监控学习笔记之Prometheus存储
  8. mysql引擎和事务
  9. oracle No more data to read from socket之ora-07445排查解决
  10. Redis随笔-rename效率问题