原生ajax兼容各种浏览器写法
时间: 2023-10-17 19:14:24 浏览: 86
兼容所有浏览器的样式写法
3星 · 编辑精心推荐
原生的 AJAX 在不同的浏览器下会有不同的写法。以下是一种常见的兼容各种浏览器的写法:
```
function createXHR() {
if (typeof XMLHttpRequest != "undefined") {
return new XMLHttpRequest();
} else if (typeof ActiveXObject != "undefined") {
if (typeof arguments.callee.activeXString != "string") {
var versions = [
"MSXML2.XMLHttp.6.0",
"MSXML2.XMLHttp.3.0",
"MSXML2.XMLHttp"
];
for (var i = 0, len = versions.length; i < len; i++) {
try {
new ActiveXObject(versions[i]);
arguments.callee.activeXString = versions[i];
break;
} catch (ex) {
// 跳过
}
}
}
return new ActiveXObject(arguments.callee.activeXString);
} else {
throw new Error("No XHR object available.");
}
}
function ajax(options) {
var xhr = createXHR();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {
options.success(xhr.responseText);
} else {
options.error(xhr.status);
}
}
};
var url = options.url;
var method = options.method || "GET";
var async = options.async || true;
var data = options.data || null;
xhr.open(method, url, async);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(data);
}
```
这段代码中,`createXHR()` 函数用于创建 XMLHttpRequest 对象,如果浏览器支持 XMLHttpRequest,则创建 XMLHttpRequest 对象并返回;否则,尝试使用 ActiveXObject 创建 XMLHttpRequest 对象。在 `ajax()` 函数中,首先调用 `createXHR()` 函数创建 XMLHttpRequest 对象,然后设置 `xhr.onreadystatechange` 函数,当 readyState 变为 4 时,判断状态码是否在 200 到 299 之间或者是否为 304,如果是则调用 `options.success()` 函数,否则调用 `options.error()` 函数。接着设置请求的 URL、请求方法、是否异步、请求数据类型等信息,最后发送请求。
阅读全文