原生和jQuery的ajax用法详解


Posted in Javascript onJanuary 23, 2017

Ajax简介

Ajax被认为是(Asynchronous(异步) JavaScript And Xml的缩写)。现在,允许浏览器与服务器通信而无须刷新当前页面的技术都被叫做Ajax.

同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。 

异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式 。

AJAX的缺陷

AJAX大量使用了JavaScript和AJAX引擎,而这个取决于浏览器的支持。IE5.0及以上、Mozilla1.0、NetScape7及以上版本才支持,Mozilla虽然也支持AJAX,但是提供XMLHttpRequest的方式不一样。所以,使用AJAX的程序必须测试针对各个浏览器的兼容性。

AJAX更新页面内容的时候并没有刷新整个页面,因此,网页的后退功能是失效的;有的用户还经常搞不清楚现在的数据是旧的还是已经更新过的。这个就需要在明显位置提醒用户“数据已更新”。

对流媒体的支持没有FLASH好。

一些手持设备(如手机、PDA等)现在还不能很好的支持Ajax。

form数据的序列化:

$('#submit').click(function(){
  $('#form').serialize();    //会根据input里面的name,把数据序列化成字符串;eg:name=yang
  $('#form').serializeArray();  //会根据input里面的name,把数据序列化成数组;eg:[object]
//注意:没有name会获取不到值
  //下面两种不是jQuery的方法
  JSON.parse()  //json字符串转化为json对象
  JSON.stringify()  //json对象转化为json字符串
});

jQuery的ajax方法:

$.ajax({
  url:'/comm/test1.php',
  type:'POST', //GET
  async:true,  //或false,是否异步
  data:{
    name:'yang',age:25
  },
  timeout:5000,  //超时时间
  dataType:'json',  //返回的数据格式:json/xml/html/script/jsonp/text
  beforeSend:function(xhr){
    console.log(xhr)
    console.log('发送前')
  },
  success:function(data,textStatus,jqXHR){
    console.log(data)
    console.log(textStatus)
    console.log(jqXHR)
  },
  error:function(xhr,textStatus){
    console.log('错误')
    console.log(xhr)
    console.log(textStatus)
  },
  complete:function(){
    console.log('结束')
  }
})

原生的ajax方法:

$('#send').click(function(){
  //请求的5个阶段,对应readyState的值
    //0: 未初始化,send方法未调用;
    //1: 正在发送请求,send方法已调用;
    //2: 请求发送完毕,send方法执行完毕;
    //3: 正在解析响应内容;
    //4: 响应内容解析完毕;
  var data = 'name=yang';
  var xhr = new XMLHttpRequest();    //创建一个ajax对象
  xhr.onreadystatechange = function(event){  //对ajax对象进行监听
    if(xhr.readyState == 4){  //4表示解析完毕
      if(xhr.status == 200){  //200为正常返回
        console.log(xhr)
      }
    }
  };
  xhr.open('POST','url',true);  //建立连接,参数一:发送方式,二:请求地址,三:是否异步,true为异步
  xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');  //可有可无
  xhr.send(data);    //发送
});
Javascript 相关文章推荐
在多个页面使用同一个HTML片段《续》
Mar 04 Javascript
JQuery 操作/获取table具体代码
Jun 13 Javascript
js 跳出页面的frameset框架示例介绍
Dec 23 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
Apr 16 Javascript
php利用curl获取远程图片实现方法
Oct 26 Javascript
JavaScript数据类型学习笔记分享
Sep 01 Javascript
微信小程序 支付简单实例及注意事项
Jan 06 Javascript
微信小程序中顶部导航栏的实现代码
Mar 30 Javascript
input 标签实现输入框带提示文字效果(两种方法)
Oct 09 Javascript
Node.js Express安装与使用教程
May 11 Javascript
微信小程序实现打开并下载服务器上面的pdf文件到手机
Sep 20 Javascript
javascript实现搜索筛选功能实例代码
Nov 12 Javascript
基于MVC方式实现三级联动(JavaScript)
Jan 23 #Javascript
利用javascript实现的三种图片放大镜效果实例(附源码)
Jan 23 #Javascript
Javascript Event(事件)的传播与冒泡
Jan 23 #Javascript
js选项卡的制作方法
Jan 23 #Javascript
bootstrap 模态框(modal)实现水平垂直居中显示
Jan 23 #Javascript
详解javascript中对数据格式化的思考
Jan 23 #Javascript
JavaScript 栈的详解及实例代码
Jan 22 #Javascript
You might like
PHP.MVC的模板标签系统(五)
2006/09/05 PHP
将文件夹压缩成zip文件的php代码
2009/12/14 PHP
浅析echo(),print(),print_r(),return之间的区别
2013/11/27 PHP
PHP之将POST数据转化为字符串的实现代码
2016/11/03 PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
2017/02/17 PHP
Yii Framework框架开发微信公众平台示例
2020/04/26 PHP
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
JavaScript入门教程(1) 什么是JS
2009/01/31 Javascript
JavaScript 提升运行速度之循环篇 译文
2009/08/15 Javascript
Javascript开发之三数组对象实例介绍
2012/11/12 Javascript
JavaScript 函数replace深入了解
2013/03/14 Javascript
jquery 实现input输入什么div图层显示什么
2014/06/15 Javascript
node.js版本管理工具n无效的原理和解决方法
2016/11/24 Javascript
详解react-redux插件入门
2018/04/19 Javascript
vue自定v-model实现表单数据双向绑定问题
2018/09/03 Javascript
vue中echarts的用法及与elementui-select的协同绑定操作
2020/11/17 Vue.js
通过滑动翻页效果实现和移动端click事件问题
2021/01/26 Javascript
[37:47]IG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
利用Python如何生成随机密码
2016/04/20 Python
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
2016/06/18 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
2019/04/06 Python
Python Django Cookie 简单用法解析
2019/08/13 Python
python装饰器的特性原理详解
2019/12/25 Python
利用Vscode进行Python开发环境配置的步骤
2020/06/22 Python
Keras 中Leaky ReLU等高级激活函数的用法
2020/07/05 Python
input元素的url类型和email类型简介
2012/07/11 HTML / CSS
当x.equals(y)等于true时,x.hashCode()与y.hashCode()可以不相等,这句话对不对
2015/05/02 面试题
技校教师求职简历的自我评价
2013/10/20 职场文书
教师专业自荐书范文
2014/02/10 职场文书
大班开学家长寄语
2014/04/04 职场文书
2014年施工员工作总结
2014/11/18 职场文书
2015年幼儿园班主任工作总结
2015/05/12 职场文书
行政处罚告知书
2015/07/01 职场文书
《祁黄羊》教学反思
2016/02/20 职场文书
Mysql数据库值的添加、修改、删除及清空操作实例
2021/06/20 MySQL
python随机打印成绩排名表
2021/06/23 Python