Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使网页实现异步更新。这使得网页更加用户友好,提高了用户体验,因为页面不会因为等待服务器响应而冻结。

基本概念

异步:Ajax的核心是异步通信,意味着可以在不阻塞用户交互的情况下发送和接收数据。

JavaScript:Ajax主要依赖JavaScript语言来创建和执行请求。

XML:虽然名字中有XML,但现在更多使用JSON格式传递数据,因为JSON更轻量且易于处理。

Ajax工作原理

Ajax的工作流程主要包括以下步骤:

创建XMLHttpRequest对象:这是所有Ajax操作的基础,现代浏览器通常内置此对象。

初始化连接:调用XMLHttpRequest对象的open()方法,指定请求类型(GET、POST等)、URL和是否异步。

设置请求头:通过setRequestHeader()方法,为HTTP请求添加必要的头部信息,如Content-Type。

发送请求:使用send()方法发送请求,对于GET请求,参数为空;对于POST请求,可能需要传递数据。

监听状态变化:使用onreadystatechange事件监听请求状态。当readyState属性值变为4(表示请求完成)时,检查status属性判断请求是否成功(通常200表示成功)。

处理响应:通过responseTextresponseXML属性获取服务器返回的数据,并在客户端进行处理。

Ajax函数实例


function sendAjaxRequest(url, callback) {

  var xhr = new XMLHttpRequest();

  xhr.onreadystatechange = function() {

    if (xhr.readyState === 4 && xhr.status === 200) {

      callback(JSON.parse(xhr.responseText));

    }

  };

  xhr.open('GET', url, true);

  xhr.send(null);

}

//使用示例

sendAjaxRequest('your-api-url', function(data) {

  console.log(data);

});

jQuery的$.ajax()方法

jQuery库提供了一个方便的$.ajax()函数来简化Ajax操作:


$.ajax({

  url: 'your-api-url',

  type: 'GET',

  dataType: 'json',

  success: function(data) {

    console.log(data);

  },

  error: function(jqXHR, textStatus, errorThrown) {

    console.error('Error:', textStatus, ', Details:', errorThrown);

  }

});

Promise风格的Ajax

随着ES6的普及,Promise成为处理异步操作的首选方式。使用fetch()axios库可以实现Promise风格的Ajax请求:


fetch('your-api-url')

  .then(response => response.json())

  .then(data => console.log(data))

  .catch(error => console.error('Error:', error));


axios.get('your-api-url')

  .then(response => console.log(response.data))

  .catch(error => console.error('Error:', error));

防止跨域问题

Ajax请求可能会遇到同源策略限制,解决方法包括:

CORS:服务器端设置Access-Control-Allow-Origin响应头。

JSONP:利用 卡了网 - Kaledl.Com