AJAX (Asynchronous JavaScript and XML) 是一种在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术。它允许网页通过JavaScript异步地向服务器发送请求和接收响应。
// 创建XMLHttpRequest对象
var xhr = new XMLHttpRequest();
// 配置请求
xhr.open('GET', 'https://your-server.com/api/data', true);
// 设置请求头(如果需要)
xhr.setRequestHeader('Content-Type', 'application/json');
// 定义回调函数
xhr.onload = function() {
if (xhr.status >= 200 && xhr.status < 300) {
// 请求成功,处理返回数据
var response = JSON.parse(xhr.responseText);
console.log(response);
} else {
// 请求失败
console.error('请求失败:', xhr.statusText);
}
};
xhr.onerror = function() {
console.error('请求出错');
};
// 发送请求
xhr.send();
fetch('https://your-server.com/api/data', {
method: 'GET', // 或 'POST', 'PUT', 'DELETE' 等
headers: {
'Content-Type': 'application/json',
// 其他自定义头部
},
// body: JSON.stringify(data) // 如果是POST请求
})
.then(response => {
if (!response.ok) {
throw new Error('网络响应不正常');
}
return response.json();
})
.then(data => {
console.log(data);
// 处理数据
})
.catch(error => {
console.error('请求出错:', error);
});
$.ajax({
url: 'https://your-server.com/api/data',
type: 'GET', // 或 'POST'
dataType: 'json',
success: function(data) {
console.log(data);
// 处理数据
},
error: function(xhr, status, error) {
console.error('请求出错:', error);
}
});
现象:浏览器控制台报错"Access-Control-Allow-Origin"
原因:出于安全考虑,浏览器会阻止跨域请求
解决方案:
Access-Control-Allow-Origin: *
或指定域名解决方案:
// XMLHttpRequest
xhr.timeout = 5000; // 5秒超时
xhr.ontimeout = function() {
console.error('请求超时');
};
// Fetch API
const controller = new AbortController();
const signal = controller.signal;
setTimeout(() => controller.abort(), 5000);
fetch(url, { signal })
.then(response => response.json())
.catch(err => {
if (err.name === 'AbortError') {
console.error('请求超时');
}
});
解决方案:
const express = require('express');
const app = express();
const cors = require('cors');
// 允许跨域
app.use(cors());
// 解析JSON请求体
app.use(express.json());
// 数据库连接(示例使用MongoDB)
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/mydb', {useNewUrlParser: true});
// 定义数据模型
const Data = mongoose.model('Data', new mongoose.Schema({
name: String,
value: Number
}));
// API端点
app.get('/api/data', async (req, res) => {
try {
const data = await Data.find();
res.json(data);
} catch (err) {
res.status(500).json({error: err.message});
}
});
app.post('/api/data', async (req, res) => {
try {
const newData = new Data(req.body);
await newData.save();
res.status(201).json(newData);
} catch (err) {
res.status(400).json({error: err.message});
}
});
// 启动服务器
app.listen(3000, () => {
console.log('服务器运行在 http://localhost:3000');
});
通过以上方法,您可以实现本地网页通过AJAX请求服务器数据库的功能,并根据具体需求选择最适合的实现方式。
没有搜到相关的文章