原生JavaScript与jQuery的Ajax实现详解

作者:青柠时间:2026-10-21 21:02:28浏览:140

本文详细解析Ajax异步通信技术原理,对比同步与异步的区别,并列举AJAX在浏览器兼容性、后退功能及移动设备支持方面的局限性。重点展示jQuery中$.ajax方法的完整配置参数,以及原生JavaScript通过XMLHttpRequest对象实现Ajax请求的标准流程与状态监听机制。

Ajax技术概述

Ajax简介

Ajax全称为Asynchronous JavaScript And XML(异步JavaScript和XML)。当前,任何允许浏览器与服务器进行数据交互而无需刷新整个页面的技术,均被归类为Ajax范畴。

同步通信的定义是:发送方发出数据请求后,必须等待接收方返回响应,之后才能继续发送下一个数据包。

异步通信的定义是:发送方发出数据请求后,无需等待接收方的响应,即可立即发送下一个数据包。

AJAX的局限性

AJAX的缺陷

AJAX技术重度依赖JavaScript和特定的AJAX引擎,其兼容性直接取决于浏览器版本的支持情况。仅IE5.0及以上、Mozilla1.0、NetScape7及以上版本支持该技术。尽管Mozilla也支持AJAX,但其提供XMLHttpRequest对象的方式与其他浏览器存在差异。因此,开发使用AJAX的应用程序时,必须针对各主流浏览器进行兼容性测试。

由于AJAX在更新页面内容时不会刷新整个页面,导致浏览器原生的“后退”功能失效;此外,部分用户难以区分当前显示的是旧数据还是已更新的数据。为此,建议在界面显著位置添加“数据已更新”的提示信息以优化用户体验。

在流媒体支持方面,AJAX的效果不如Flash技术理想。

部分手持设备(如早期手机、PDA等)对Ajax的支持尚不完善。

数据序列化与jQuery实现

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配置详解

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('结束')
  }
})

原生XMLHttpRequest实现

原生的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);    //发送
});

作者最新文章