1. AJAX 简介
AJAX 是 Asynchronous JavaScript and XML 的简称,意为异步的 JavaScript 和 XML。AJAX 可以有效地解决 Web 应用程序中数据传输的问题,实现异步加载。
与传统的同步加载不同,AJAX 可以使 Web 应用程序非常快速和高效地加载,因为不必在每次用户交互时都重新加载整个页面。
在 AJAX 中,通过 JavaScript 去请求一个 URL,然后去解析返回的 XML 文件,从而实现异步加载。
下面是一个简单的 AJAX 请求示例:
let xhr = new XMLHttpRequest(); // 创建 XMLHttpRequest 对象
xhr.open('GET', 'url', true); // 配置请求
xhr.onreadystatechange = function() { // readyState 改变时执行回调
if (xhr.readyState === 4 && xhr.status === 200) { // 请求成功
console.log(xhr.responseText);
}
};
xhr.send(); // 发送请求
2. AJAX 效果
下面介绍 20 个出色的 AJAX 效果,这些效果可以让您的 Web 应用程序更加优美和高效。
2.1 AJAX 表单提交
使用 AJAX 可以实现表单的异步提交,避免了页面跳转的问题,从而提升用户体验。
以下是一个简单的 AJAX 表单提交的例子:
let form = document.querySelector('form');
form.addEventListener('submit', function(event) {
event.preventDefault(); // 防止表单跳转
let xhr = new XMLHttpRequest();
xhr.open('POST', 'url', true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
console.log(xhr.responseText);
}
};
let data = {
username: form.elements.username.value,
password: form.elements.password.value
};
xhr.send(JSON.stringify(data)); // 发送 JSON 数据
});
2.2 AJAX 自动补全
使用 AJAX 可以实现自动补全功能,例如搜索字词时,可以通过 AJAX 请求获取匹配的结果,提升用户体验。
以下是一个简单的 AJAX 自动补全的例子:
let input = document.querySelector('input[type=search]');
input.addEventListener('input', function() {
let xhr = new XMLHttpRequest();
xhr.open('GET', 'url' + input.value, true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
let results = JSON.parse(xhr.responseText);
// 将结果显示在页面上
}
};
xhr.send();
});
2.3 AJAX 分页加载
使用 AJAX 可以实现分页加载功能,避免了一次性加载大量数据的问题,从而提高网站的性能。
以下是一个简单的 AJAX 分页加载的例子:
let page = 1;
let loading = false;
function loadMore() {
if (!loading) {
loading = true;
let xhr = new XMLHttpRequest();
xhr.open('GET', 'url?page=' + page, true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
let data = JSON.parse(xhr.responseText);
// 将数据添加到页面上
page++;
loading = false;
}
};
xhr.send();
}
}
window.addEventListener('scroll', function() {
if (document.documentElement.clientHeight + window.pageYOffset >= document.body.offsetHeight) {
loadMore();
}
});
2.4 AJAX 图片切换
使用 AJAX 可以实现图片切换功能,在页面不刷新的情况下更换图片。
以下是一个简单的 AJAX 图片切换的例子:
let img = document.querySelector('img');
let button = document.querySelector('button');
button.addEventListener('click', function() {
let xhr = new XMLHttpRequest();
xhr.open('GET', 'url', true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
let url = JSON.parse(xhr.responseText);
img.src = url;
}
};
xhr.send();
});
2.5 AJAX 选项卡
使用 AJAX 可以实现选项卡功能,可以在不刷新页面的情况下切换页面内容。
以下是一个简单的 AJAX 选项卡的例子:
let tabs = document.querySelectorAll('.tab');
let contents = document.querySelectorAll('.content');
for (let i = 0; i < tabs.length; i++) {
tabs[i].addEventListener('click', function() {
let xhr = new XMLHttpRequest();
xhr.open('GET', 'url' + i, true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
contents[i].innerHTML = xhr.responseText;
}
};
xhr.send();
});
}
2.6 AJAX 加载更多评论
使用 AJAX 可以实现加载更多评论功能,避免一次性加载过多数据而导致页面卡顿。
以下是一个简单的 AJAX 加载更多评论的例子:
let button = document.querySelector('button');
let comments = document.querySelector('.comments');
let page = 1;
button.addEventListener('click', function() {
let xhr = new XMLHttpRequest();
xhr.open('GET', 'url?page=' + page, true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
let data = JSON.parse(xhr.responseText);
// 将数据添加到页面上
page++;
}
};
xhr.send();
});
2.7 AJAX 无限滚动
使用 AJAX 可以实现无限滚动功能,避免了一次性加载大量数据而导致页面卡顿。
以下是一个简单的 AJAX 无限滚动的例子:
let container = document.querySelector('.container');
let page = 1;
let loading = false;
window.addEventListener('scroll', function() {
if (!loading && document.documentElement.clientHeight + window.pageYOffset >= container.offsetHeight) {
loading = true;
let xhr = new XMLHttpRequest();
xhr.open('GET', 'url?page=' + page, true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
let data = JSON.parse(xhr.responseText);
// 将数据添加到页面上
page++;
loading = false;
}
};
xhr.send();
}
});
2.8 AJAX 加载 SVG 图像
使用 AJAX 可以实现加载 SVG 图像的功能。
以下是一个简单的 AJAX 加载 SVG 图像的例子:
let svg = document.querySelector('svg');
let xhr = new XMLHttpRequest();
xhr.open('GET', 'image.svg', true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
let xml = xhr.responseXML;
svg.appendChild(xml.documentElement);
}
};
xhr.send();
2.9 AJAX 加载同域 HTML
使用 AJAX 可以实现加载同域 HTML 的功能。
以下是一个简单的 AJAX 加载同域 HTML 的例子:
let container = document.querySelector('.container');
let xhr = new XMLHttpRequest();
xhr.open('GET', 'page.html', true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
container.innerHTML = xhr.responseText;
}
};
xhr.send();
2.10 AJAX 加载外域 HTML
使用 AJAX 可以实现加载外域 HTML 的功能。
以下是一个简单的 AJAX 加载外域 HTML 的例子:
let container = document.querySelector('.container');
let xhr = new XMLHttpRequest();
xhr.open('GET', 'https://www.example.com/page.html', true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
container.innerHTML = xhr.responseText;
}
};
xhr.send();
2.11 AJAX 加载同域 XML
使用 AJAX 可以实现加载同域 XML 的功能。
以下是一个简单的 AJAX 加载同域 XML 的例子:
let xhr = new XMLHttpRequest();
xhr.open('GET', 'data.xml', true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
let xml = xhr.responseXML;
let items = xml.getElementsByTagName('item');
for (let i = 0; i < items.length; i++) {
// 处理数据
}
}
};
xhr.send();
2.12 AJAX 加载同域 JSON
使用 AJAX 可以实现加载同域 JSON 的功能。
以下是一个简单的 AJAX 加载同域 JSON 的例子:
let xhr = new XMLHttpRequest();
xhr.open('GET', 'data.json', true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
let data = JSON.parse(xhr.responseText);
}
};
xhr.send();
2.13 AJAX 加载外域 JSONP
使用 AJAX 可以实现加载外域 JSONP 的功能。
以下是一个简单的 AJAX 加载外域 JSONP 的例子:
let script = document.createElement('script');
script.src = 'https://www.example.com/data.js';
document.head.appendChild(script);
function processData(data) {
// 处理数据
}
2.14 AJAX 实时搜索
使用 AJAX 可以实现实时搜索的功能。
以下是一个简单的 AJAX 实时搜索的例子:
let input = document.querySelector('input[type=search]');
input.addEventListener('input', function() {
let xhr = new XMLHttpRequest();
xhr.open('GET', 'url' + input.value, true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
let results = JSON.parse(xhr.responseText);
// 将结果显示在页面上
}
};
xhr.send();
});
2.15 AJAX 加载 Google 地图
使用 AJAX 可以实现加载 Google 地图的功能。
以下是一个简单的 AJAX 加载 Google 地图的例子:
let map = document.querySelector('.map');
let xhr = new XMLHttpRequest();
xhr.open('GET', 'https://maps.googleapis.com/maps/api/js', true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
let script = document.createElement('script');
script.textContent = xhr.responseText;
document.head.appendChild(script);
let map = new google.maps.Map(container, {
center: {lat: -34.397, lng: 150.644},
zoom: 8
});
}
};
xhr.send();
2.16 AJAX 加载 YouTube 视频
使用 AJAX 可以实现加载 YouTube 视频的功能。
以下是一个简单的 AJAX 加载 YouTube 视频的例子:
let video = document.querySelector('.video');
let xhr = new XMLHttpRequest();
xhr.open('GET', 'https://www.youtube.com/player_api', true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
let script = document.createElement('script');
script.textContent = xhr.responseText;
document.head.appendChild(script);
let player = new YT.Player(video, {
videoId: 'VIDEO_ID'
});
}
};
xhr.send();
2.17 AJAX 加载 Twitter 内容
使用 AJAX 可以实现加载 Twitter 内容的功能。
以下是一个简单的 AJAX 加载 Twitter 内容的例子:
let container = document.querySelector('.tweets');
let xhr = new XMLHttpRequest();
xhr.open('GET', 'https://publish.twitter.com/oembed?url=https://twitter.com/twitter/status/TWEET_ID', true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
let data = JSON.parse(xhr.responseText);
container.innerHTML = data.html;
}
};
xhr.send();
2.18 AJAX 加载 Flickr 图像
使用 AJAX 可以实现加载 Flickr 图像的功能。
以下是一个简单的 AJAX 加载 Flickr 图像的例子:
let container = document.querySelector('.photos');
let xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=API_KEY&text=SEARCH_TEXT&format=json&nojsoncallback=1', true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
let data = JSON.parse(xhr.responseText);
let photos = data.photos.photo;
for (let i = 0; i < photos.length; i++) {
let photo = photos[i];
let img = document.createElement('img');
img.src = 'https://farm' + photo.farm + '.staticflickr.com/' + photo.server + '/' + photo.id + '_' + photo.secret + '.jpg';
container.appendChild(img);
}
}
};
xhr.send();
2.19 AJAX 加载天气信息
使用 AJAX 可以实现加载天气信息的功能。
以下是一个简单的 AJAX 加载天气信息的例子:
let location = '北京';
let temperature = 'celsius';
let xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.openweathermap.org/data/2.5/weather?q=' + location + '&units=' + temperature + '&appid=API_KEY', true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
let data = JSON.parse(xhr.responseText);
let temperature = data.main.temp;
let description = data.weather[0].description;
let humidity = data.main.humidity;
// 处理天气信息
}
};
xhr.send();
2.20 AJAX 加载网页模板
使用 AJAX 可以实现加载网页模板的功能。
以下是一个简单的 AJAX 加载网页模板的例子:
let container = document.querySelector('.template');
let xhr = new XMLHttpRequest();
xhr.open('GET', 'template.html', true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
let html = xhr.responseText;
// 处理模板
}
};
xhr.send();