jQuery中ajax的相关知识点汇总

前言

学习JavaScript的同学都知道, AJAX (async javascript and
xml)翻译叫做异步的JavaScript和XML , 在原生js中使用发送网络请求也是一件麻烦事,每次都是那几个步骤.

我们先来回顾一下在原生js中如何发送一个 ajax 网络请求

经典4步曲

1.原生js的ajax网络请求

 // IE9及以上
 // const xhr = new XMLHttpRequest()
 // IE9以下
 // const xhr = new ActiveXObject('Mricosoft.XMLHTTP')

 // 对于这个兼容写法我们可以用一个函数来封装
 function createXHR() {
 var req = null;
 if (window.XMLHttpRequest) {
 // 如果有这个XMLHttpRequest对象就直接使用
 req = new XMLHttpRequest();
 } else {
 // 否则就使用IE8一下的写法
 req = new ActiveXObject("Microsoft.XMLHTTP");
 }
 return req;
 }
 // 第一步:创建ajax对象
 var xhr = createXHR(); //这样就拿到了一个ajax对象
 // 第二步:配置网络请求信息

 xhr.open('get', './demo.php', true)
 // xhr.open('get/post','要发送网络请求去哪个地址',同步还是异步默认 true 表示异步,false 表示同步)
 // 如果是get请求有参数需要拼接在地址后面,例如'./demo.php?id=2&name=sanqi'
 // 如果是post请求,参数就要放在send()里面,例如:xhr.send('id=2&name=sanqi')
 // 第三步:发送网络请求
 xhr.send() //
 // 第四部:判断响应状态拿到数据
 xhr.onreadyStateChange = function () {
 // 每次 readyState 改变的时候都会触发该事件
 // 我们就在这里判断 readyState 的值是不是到 4
 // 并且 http 的状态码是不是 200 ~ 299
 if (xhr.readyState === 4 && /^2\d{2|$/.test(xhr.status)) {
 // 这里表示验证通过
 // 我们就可以获取服务端给我们响应的内容了
 console.log(xhr.response);
 }
 }

这里补充一下readyState的5个状态

  • readyState --> 0: 表示未初始化完成,也就是 open 方法还没有执行
  • readyState --> 1: 表示配置信息已经完成,也就是执行完 open 之后
  • readyState --> 2: 表示 send 方法已经执行完成
  • readyState --> 3: 表示正在解析响应内容
  • readyState --> 4: 表示响应内容已经解析完毕,可以在客户端使用了

上面就是原生的js发送一个ajax网络请求

2.关于使用jQuery的ajax网络请求

我们在学习jquery,就了解到,大家都在说,什么 jq 都给我们封装好啦,这些网络请求都不用我们去写啦,虽说如此,但是也还是不能盲目,还是 要具体了解之后才会使用.

(1).利用jquery发送get请求

下面统一后端代码使用文件名为: test.php 这个文件

<?php
header('content-type:text/html;charset=utf-8;');
 $id = $_REQUEST['id'];
 $name = $_REQUEST['name'];
 $arr = [
 'id' => $id,
 'name' => $name
 ];
 echo json_encode($arr);
?>

使用jquery发送get请求

  $.get('./test.php','id=999&name=三七安',function (res) {
  //第一个参数是请求的地址
  //第二个参数是要发送给服务器的数据
  //第三个参数是成功时的回调函数,里面包含服务返回给我们的数据
  //第四个参数是我们希望拿到的数据格式:有几种选择:json,text,html,xml,script
  console.log(res);
  },'json')

可以看到请求是发送成功了的

(2) 利用jquery发送post请求

	 $.post('./test.php',{id:123,name:'post请求'},function (res) {
	 //这里其他参数和get请求一致的
	 //注意,这里的传输数据我用 对象的格式来写,也能发送请求成功,也就是说
	 //无论是get请求还是post请求,想服务端传数据,既可以使用字符串格式也可以使用对象格式
  console.log(res);
  },'json')

这是请求成功的的页面

(3)利用jquery发送综合发送 ajax 请求

先来浏览一下语法

 // 使用 $.ajax 方法
 // 只接受一个参数,是一个对象,这个对象对当前的请求进行所有的配置
 $.ajax({
  url: './ajax', // 必填,请求的地址
  type: 'GET', // 选填,请求方式,默认是 GET(忽略大小写)
  data: {}, // 选填,发送请求是携带的参数
  dataType: 'json', // 选填,期望返回值的数据类型,默认是 string
  async: true, // 选填,是否异步,默认是 true
  success() {}, // 选填,成功的回调函数
  error() {}, // 选填,失败的回调函数
  cache: true, // 选填,是否缓存,默认是 true
  context: div, // 选填,回调函数中的 this 指向,默认是 ajax 对象
  status: {}, // 选填,根据对应的状态码进行函数执行
  timeout: 1000, // 选填,超时事件
 })

好像每次都要填好多参数,但其实大部分参数都是选填的,我们只要看实际情况来填写

在编译器里面,直接输入ajax也可以快捷生成部分代码

发送ajax请求代码

$.ajax({
  type: "get",
  url: "./test.php",
  data: {
   id:000,
   name:'发送$.ajax请求的演示'
  },
  dataType: "json",
  success: function (response) {
   console.log(response);
  }
  });

打开网页就可以看到我们从后端拿回来的数据

下面补充几个Ajax的全局函数,也叫钩子函数,也就是在Ajax整个请求过程中的某一个阶段执行的函数,而且是任意一个Ajax请求都会触发.

1. ajaxStart, 任意一个请求开始的时候都会触发这个函数

$(window).ajaxStart(function () {
 console.log('有一个请求开始了')
})

2. ajaxSend , 任意一个 请求准备send之前都会触发这个请求.

$(window).ajaxSend(function () {
 console.log('有一个要发送出去了')
})

3.ajaxSuccess, 任意一个 请求成功的时候都会触发这个函数.

$(window).ajaxSuccess(function () {
 console.log('有一个请求成功了')
})

4.ajaxError , 任意一个 请求失败的时候就会触发这个函数.

$(window).ajaxError(function () {
 console.log('有一个请求失败了')
})

5.ajaxComplete , 任意一个 请求完成的时候就会触发这个函数

$(window).ajaxComplete(function () {
 console.log('有一个请求完成了')
})

6.ajaxStop , 任意一个 请求结束的时候就会触发这个函数

$(window).ajaxStop(function () {
 console.log('有一个请求结束了')
})

总结

到此这篇关于jQuery中ajax的相关知识点汇总的文章就介绍到这了,更多相关jQuery ajax知识点内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Jquery ajax请求导出Excel表格的实现代码

    直接贴代码吧 $("#btn-export").click(function(){ var exportExcel = "export_excel"; dataParams[exportExcel] = 1; var params = $.param(dataParams); var url = host+"&"+params; $('<form method="post" action="' + ur

  • JQuery的Ajax请求实现局部刷新的简单实例

    请求的ajax路径传递的参数(data)会到action中被一个同样名字的变量(附带set get方法)接收,返回的data是一个JQuery的数组对象,在被调用的action中涉及到的数据变量会对象,都会封装到data中最终返回给页面. 案例:如图 我要实现状态的更改,用JQuery的Ajax更改完之后图标发生改变,实现页面的局部刷新 原理:局部刷新是刷新页面的一部分,在此案例中实现的只是图标的改变,把后台代码和前台现实的图标分离,并不是对数据库重新做查询,二是后台数显数据修改之后,前台直接改

  • Jquery Ajax请求文件下载操作失败的原因分析及解决办法

    jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写JavaScript代码的习惯. 废话少说,直接进入正题,我们先来分析一下失败的原因 一.失败的原因 那是因为response原因,一般请求浏览器是会处理服务器输出的response,例如生成png.文件下载等,然而ajax请求只是个"字符型"的请求,即请求的内容是以文本类型存放的.文件的下载是以二进制形式进行的,虽然可以读取到返回的response,但只是读取而已,是无法执行的,说白

  • 浅析jQuery Ajax请求参数和返回数据的处理

    刚接触学会用jQuery ajax的时候,觉得真东西好神奇,这样就可以把数据取回来了啊.然后我可以把取回来的数据渲染到页面上,一颗赛艇. 之前很早接触到项目,并不知道怎么优雅的去用jquery ajax(现在也不优雅): 那个时候看别人写的代码 有 $.post("","",...) 也有 $.get("","",...) 还有 $.ajax() 当然现在知道点,这些写法都是一个意思,还是习惯用 $.ajax() 写写吧. 之

  • 为jquery的ajax请求添加超时timeout时间的操作方法

    下面给大家介绍为jquery的ajax请求添加超时timeout时间的实例 有时侯要用ajax来轮询某个服务是否可用,但是各个浏览器ajax的超时时间有可能不一样,所以希望ajax能只尝试几秒钟,然后隔几秒再次发送一次ajax检查一次.可以用timeout属性. var checkLoading = function(timer) { //先延时再获取状态,否则立即获取可能重启前的服务还没有关闭 setTimeout(function() { $.ajax({ url: '/onceos/ver

  • jQuery.ajax 跨域请求webapi设置headers的解决方案

    解决跨域调用服务并设置headers 主要的解决方法需要通过服务器端设置响应头.正确响应options请求,正确设置 JavaScript端需要设置的headers信息 方能实现. 1.第一步 服务端设置响应头,在webapi的web.config做如下设置 <system.webServer> <httpProtocol> <!--跨域配置开始--> <customHeaders> <add name="Access-Control-All

  • jquery的ajax异步请求接收返回json数据实例

    jquery的ajax异步请求接收返回json数据方法设置简单,一个是服务器处理程序是返回json数据,另一种就是ajax发送设置的datatype设置为jsonp格式数据或json格式都可以. 代码示例如下: 复制代码 代码如下: $('#send').click(function () {     $.ajax({         type : "GET",         url : "a.php",         dataType : "json

  • jquery ajax请求方式与提示用户正在处理请稍等

    初次使用$.ajax() ,我没有去区分过ajax的异步请求和同步请求的不同,刚开始使用同步请求,以至后来出现许多问题,特别在体验度方面. 异步和同步: 同步意味着执行完一段程序才能执行下一段,它属于阻塞模式,其表现在网页上的现象是--浏览器会锁定页面(即所谓的页面假死状态),用户不能操作其它的,必须等待当前请求返回数据.而使用异步方式请求,页面不会出现假死现象. 提升用户体验度: 当用户提交数据等待页面返回结果是需要时间的,有时这段等待时间比较长,为了提高用户体验度,我们通常会给出 "正在处理

  • 跨域请求之jQuery的ajax jsonp的使用解惑

    直接执行了error方法提示错误--ajax jsonp之前并没有用过,对其的理解为跟普通的ajax请求差不多,没有深入了解:出现了这种错误,几经调试(检查后台的代码和js部分的属性设置)还是不行,让我感觉很是意外和不解.于是,决定仔细研究下ajax jsonp的使用,并将最后测试成功的学习经验和大家分享下! 首先,贴出可以成功执行的代码: (页面部分) 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional

  • 教你如何终止JQUERY的$.AJAX请求

    最近遇到,如果用户频繁点击ajax请求,有两个问题: 1,如果连续点击了5个ajax请求,前4个其实是无效的,趁早结束节省资源. 2,更严重的问题是:最后一个发送的请求,响应未必是最后一个,有可能造成混乱.还需要一个队列来维护发送的请求和响应. 我其实已经设计好了该队列的实现方式,后来发现jQuery直接通过abort方法,这样就不需要那么复杂的实现了,毕竟还有其他事情等着完成. 用jquery发送ajax请求的确是太方便了,$.get.$.post.$.ajax等等,但我们有时候需要中途中止a

随机推荐