1,什么是ajax?

  Asynchronous JavaScript and XML(当然现在xml已经由json代替);

  主要是用于前后台的交互(表单提交已经被废弃);

  使用场景:前台获取数据、表单的失焦验证;


2,如何在有服务的环境下使用ajax发送请求

    1.创建ajax对象-xmlhttprequest对象:(分为两种类型)

    在新版本的浏览器中:variable=new XMLHttpRequest();

    老版本的IE中:variable=new ActiveXObject("Microsoft.XMLHTTP");

    所以在这里我们需要考虑到兼容性的问题: 

 
  1.      var xhr;
  2. if(window.XMLHttpRequest){ //常规,如果有,直接使用
  3. xhr = new XMLHttpRequest();
  4. }else{ //如果没有,老版本IE
  5. xhr = new ActiveXObject("Microsoft.XMLHTTP");
  6. }
  7. console.log(xhr)
  8. console.log("状态码:" + xhr.readyState);
  9. console.log('响应码:' + xhr.status);
  10. console.log('响应文本:' + xhr.responseText);
  11. console.log('步骤一完成')

  

  2.通过监听ajax的状态的改变来监听:

 
  1. xhr.onreadystatechange = function(){
  2. console.log('xhr的状态码发生了改变');
  3. console.log("状态码:" + xhr.readyState);
  4. console.log('响应码:' + xhr.status);
  5. console.log('响应文本:' + xhr.responseText);
  6. console.log('\n');
  7. }
  8. console.log('步骤二完成')
 

  3.创建请求的消息,连接服务器

  1. xhr.open('GET','07.php',true); //最后一个参数是bool,表示同步||异步,true异步
  2. console.log('步骤三完成')

  4.发送

  1. 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部分:

  1. 用户名:<input type="text" id="username">
  2. <span id="ts"></span><br>
  3. 密码:<input type="text">
  4.     <button id="btn">验证用户名</button>

原生js部分:

 
  1. <script>
  2. var username = document.getElementById("username");
  3. var btn = document.getElementById("btn");
  4. var ts= document.getElementById("ts");
  5.  
  6. // 点击btn发送ajax请求
  7. btn.onclick = function(){
  8. // 1.创建xhr
  9. var xhr;
  10. if(window.XMLHttpRequest){ //常规,如果有,直接使用
  11. xhr = new XMLHttpRequest();
  12. }else{ //如果没有,老版本IE
  13. xhr = new ActiveXObject("Microsoft.XMLHTTP");
  14. }
  15. // 2.绑定监听函数
  16. xhr.onreadystatechange = function(){
  17. if(xhr.readyState == 4){
  18. if(xhr.status == 200){
  19. console.log(xhr.responseText)
  20. if(xhr.responseText == 1){
  21. ts.innerHTML = "该用户名已经被注册"
  22. }else if(xhr.responseText == 0){
  23. ts.innerHTML = "该用户名可以使用"
  24. }
  25.  
  26. }
  27. }
  28. }
  29. // 3.建立连接
  30. xhr.open("GET","08.php?uname=" + username.value,true);
  31. // 正则验证
  32. // 4.发送请求
  33. xhr.send(null)
  34. }
  35.  
  36. //get是直接可以在地址栏中调试
  37. </script>
 

4,使用ajax发送post请求

html:

  1. 学生姓名:<input type="text" id="uname"><br>
  2. 学生成绩:<input type="text" id="score"><br>
  3. <button id="btn">注册</button>
  4. <p id="p01"></p>

原生js部分:

 
  1. <script>
  2. function get_id(id){
  3. return document.getElementById(id);
  4. }
  5.  
  6. var uname = get_id("uname");
  7. var score = get_id("score");
  8. var btn = get_id("btn");
  9. var p01 = get_id("p01");
  10.  
  11. var reg_name = /^[a-z]{3,10}$/g;
  12. var reg_score = /^\d{1,2}$/g;
  13. var uname_flag = false;
  14.  
  15. uname.onfocus = function(){
  16. reg_name.lastIndex = 0;
  17. this.style.border = '1px solid #000'
  18. uname_flag = false;
  19. }
  20. uname.onblur = function(){
  21.  
  22. if(reg_name.test(uname.value)){
  23. this.style.border = '1px solid #0f0';
  24. uname_flag = true;
  25. }else {
  26. this.style.border = '1px solid #f00'
  27. }
  28. }
  29.  
  30. btn.onclick = function(){
  31. if(uname_flag){
  32. // 1.
  33. var xhr;
  34. if(window.XMLHttpRequest){ //常规,如果有,直接使用
  35. xhr = new XMLHttpRequest();
  36. }else{ //如果没有,老版本IE
  37. xhr = new ActiveXObject("Microsoft.XMLHTTP");
  38. }
  39. // 2.
  40. xhr.onreadystatechange = function(){
  41. if(xhr.readyState == 4){
  42. if (xhr.status == 200) {
  43. console.log(xhr.responseText);
  44. p01.innerHTML = xhr.responseText;
  45. }
  46. }
  47. }
  48. // 3.
  49. xhr.open('POST','http://localhost:8888/0220ajax/09.php',true);
  50. // 3.5 在发送post请求的时候,你得告诉服务器你发送的是一个什么
  51. xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
  52. // 4.发送
  53. xhr.send('strName=' + uname.value + '&strScore=' + score.value);
  54.  
  55. }
  56. }
  57. </script>
 

5,使用jQuery—ajax发送get请求

  1. 用户名:<input type="text" id="username">
  2.   <span id="ts"></span>
  3.   <br>
  4. 密码: <input type="text">
  5. <button id="btn">验证用户名</button>
 
  1. $("#btn").click(function(){
  2. $.ajax({
  3. type : "GET",
  4. url : "01.php?uname=" + $("#username").val(),
  5. success : function(data){ //就是原生的xhr.responseText
  6. console.log(data);
  7. if(data == 0){
  8. $("#ts").html("该用户名可以使用").css("color","green");
  9. }else if(data == 1){
  10. $("#ts").html("该用户名已被占用").css("color","red");
  11. }
  12. },
  13. error : function(err){ //错误的
  14. console.log(err)
  15. }
  16. })
  17. })
 

6,使用jQuery—ajax发送post请求

(html部分与上面相同相同)

  1. $("#btn").click(function(){
  2. $.ajax({
  3. type : "POST",
  4. url : "http://192.168.9.154:8888/0221ajax/01.php",
  5. data : {
  6. uname : $("#username").val()
  7. },
  8. success : function(data){ //就是原生的xhr.responseText
  9. console.log(data);
  10. if(data == 0){
  11. $("#ts").html("该用户名可以使用").css("color","green");
  12. }else if(data == 1){
  13. $("#ts").html("该用户名已被占用").css("color","red");
  14. }
  15. },
  16. error : function(err){ //错误的
  17. console.log(err)
  18. }
  19. })
  20. })

参考: https://www.cnblogs.com/1234wu/p/10414973.html

Ajax - 发送请求原理的更多相关文章

  1. AJAX异步请求原理和过程

    AJAX 指异步 JavaScript 及 XML(Asynchronous JavaScript And XML),它不是一种新的编程语言,而是一种使用现有标准的新方法. AJAX 基于 JavaS ...

  2. ajax发送请求跨域 - uri java代理

    问题:ajax发送请求出现cors跨域 解决办法:可以通过java代理的方式,后台发送请求 1.get请求 public void proxyGet(String url) { try { URL r ...

  3. Ajax发送请求等待时弹出模态框等待提示

    主要的代码分为两块,一个是CSS定义模态框,另一个是在Ajax中弹出模态框. 查看菜鸟教程中的模态框教程demo,http://www.runoob.com/try/try.php?filename= ...

  4. ajax对象。同步与异步及ajax发送请求

    ajax对象的属性.方法 属性 readyState: Ajax状态码 * 0:表示对象已建立,但未初始化,只是 new 成功获取了对象,但是未调用open方法 1:表示对象已初始化,但未发送,调用了 ...

  5. Django——Ajax发送请求验证用户名是否被注册

    场景: 用户注册的时候,输入用户名之后,Ajax发送请求到后端,后端验证该用户名是否已经被注册,然后返回到注册页面提示用户. 1.模型: from django.db import models cl ...

  6. Ajax服务请求原理 简单总结

    刚开始以为Ajax是一种新的语言,接触之后才知道,ajax是用于服务器交换数据并更新部分网页的Web应用程序的技术. 第一次看到Ajax请求代码时,感觉一脸萌逼,这些代码竟然把后台数据请求过来了,神奇 ...

  7. ajax发送请求

    首先创建XMLHttpRequest对象,利用此对象发送请求 主页面 <!doctype html> <html lang="en"> <head&g ...

  8. Ajax异步请求原理的分析

    我们知道,在同步请求模型中,浏览器是直接向服务器发送请求,并直接接收.处理服务器响应的数据的.这就导致了浏览器发送完一个请求后,就只能干等着服务器那边处理请求,响应请求,在这期间其它事情都做不了.这就 ...

  9. 原生Ajax发送请求

    ajax  get&post 1.使用get发送请求,会有请求缓存 1)什么叫请求缓存,请求信息相同浏览器不会再向服务器发送请求,导致访问服务器失败. 2)解决:将随机数添加到请求路径后面参数 ...

随机推荐

  1. flask模板应用-空白控制

    模板应用实践 空白控制 在实际输出的HTML文件中,模板中的jinja2语句.表达式和注释会保留移除后的空行. 例如下面的代码: {% set user.age = 23 %} {% if urer. ...

  2. jenkins2

    创建工程 Eclipse创建工程:注意工程的路径,不是/home/svn,这个是svn的根目录. 是工程上传的路径,Apple直接下面有pom文件. 创建工程,创建一个任务就是创建一个工程. 需要注意 ...

  3. es6基本语法

    //let和const申明变量和常量 //作用域只限于当前代码块 //使用let申明的变量作用域不会提升 //在相同的作用域下不能申明相同的变量 //for循环体现let的父子作用域 二.es6的解构 ...

  4. bzoj4444 国旗计划

    题目链接 倍增,预处理出每个点往后$2^i$个应该选哪个人 我用的treap就是快 #include<algorithm> #include<iostream> #includ ...

  5. 2、在VM上的 CentOS 6.5 上安装mysql

    1.查看系统是否安装了MySQL     使用命令:     #rpm -qa | grep mysql 2.卸载已安装的MySQL      卸载mysql命令如下:       #rpm -e - ...

  6. GoldenGate实时投递数据到大数据平台(4)- ElasticSearch 2.x

    ES 2.x ES 2.x安装 下载elasticSearch 2.4.5, https://www.elastic.co/downloads/elasticsearch 解压下载后的压缩包,启动ES ...

  7. Oracle12.2中新增的分区功能

    Oracle 12.2已经发布一段时间,公网上也可以下载试用.针对12.2,partitioning(分区)也有了不少增强. 自动列表分区 多字段列表分区 只读分区 分区维护时允许过滤 在线转换非分区 ...

  8. 通过数组和枚举简化GPIO操作编码(转)

    源: 通过数组和枚举简化GPIO操作编码

  9. centos系统swap设置 查看swap分区的方法

    交换分区swap,意思是“交换”.“实物交易”,它的功能就是在内存不够的情况下,操作系统先把内存中暂时不用的数据,存到硬盘的交换空间,腾出内存来让别的程序运行,和Windows的虚拟内存(pagefi ...

  10. API网关性能比较:NGINX vs. ZUUL vs. Spring Cloud Gateway vs. Linkerd(转)

    前几天拜读了 OpsGenie 公司(一家致力于 Dev & Ops 的公司)的资深工程师 Turgay Çelik 博士写的一篇文章(链接在文末),文中介绍了他们最初也是采用 Nginx 作 ...