作者:乃君敏睿64 | 来源:互联网 | 2024-12-03 09:41
在Web开发中,异步Javascript和XML (Ajax) 是一种在网页上进行异步数据交换的技术,它允许页面在后台与服务器通信,而无需刷新整个页面。下面是一个兼容Internet Explorer的Ajax函数示例:
function customAjax(method, url, params, onSuccess, onFailure) {
let xhr;
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
} else {
xhr = new ActiveXObject('Microsoft.XMLHTTP');
}
method = method.toUpperCase();
const cacheBuster = `?_=${Date.now()}`;
if (typeof params === 'object') {
let query = '';
for (let key in params) {
if (params.hasOwnProperty(key)) {
query += `${key}=${encodeURIComponent(params[key])}&`;
}
}
query = query.slice(0, -1);
params = query;
}
if (method === 'GET') {
xhr.open(method, url + (params ? '?' + params : '') + cacheBuster, true);
xhr.send();
} else if (method === 'POST') {
xhr.open(method, url, true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send(params);
}
xhr.Onreadystatechange= function() {
if (xhr.readyState === 4) {
if (xhr.status >= 200 && xhr.status <300) {
onSuccess(xhr.responseText);
} else {
if (onFailure) {
onFailure(xhr.status);
}
}
}
};
}
const testData = { name: 'John Doe', gender: 'male' };
customAjax('GET', '/api/data', testData, function(response) {
console.log(response);
}, function(error) {
console.error('Error:', error);
});
Ajax请求的生命周期由五个状态组成:
0 - 请求未初始化
1 - 服务器连接已建立
2 - 请求已接收
3 - 请求处理中
4 - 请求已完成,且响应已就绪
HTTP状态码提供了关于请求处理情况的信息:
200 - 请求成功
3xx - 重定向
4xx - 客户端错误
5xx - 服务器错误
跨域问题是指浏览器出于安全考虑,限制了一个域下的文档或脚本如何与另一个域下的资源进行交互。当涉及到协议、域名或端口号中的任何一个不同时,就会发生跨域。
解决跨域的方法包括:
1. JSONP (JSON with Padding): 利用标签不受同源策略限制的特点,通过动态创建标签来请求数据。
2. CORS (Cross-Origin Resource Sharing): 服务器端通过设置特定的HTTP头部来允许来自指定来源的请求。
此外,还有如代理服务器、WebSocket等其他跨域解决方案。