gpt4 book ai didi

ajax - 检索跨浏览器 XmlHttpRequest 的最简单方法

转载 作者:行者123 更新时间:2023-12-03 01:30:37 24 4
gpt4 key购买 nike

检索适用于所有浏览器的 XmlHttpRequest 对象的最简单、最安全的方法是什么?无需任何额外的库。有没有您经常使用的代码片段?

附注我知道网上有大量的例子,但这正是我要问的原因:有太多不同的例子,我只想要一些简单且经证明有效的东西。

jQuery 和其他库不是一个选项。 Why does jquery leak memory so badly?

最佳答案

虽然我建议使用完整的库来简化使用,但在现代浏览器中发出 AJAX 请求可能相当简单:

var req = new XMLHttpRequest();
req.onreadystatechange = function(){
if(this.readyState == 4){
alert('Status code: ' + this.status);
// The response content is in this.responseText
}
}
req.open('GET', '/some-url', true);
req.send();

以下代码片段是基于 quirksmode.org 中的代码片段的更高级代码片段甚至支持非常旧的浏览器(早于 Internet Explorer 7):

function sendRequest(url,callback,postData) {
var req = createXMLHTTPObject();
if (!req) return;
var method = (postData) ? "POST" : "GET";
req.open(method,url,true);
// Setting the user agent is not allowed in most modern browsers It was
// a requirement for some Internet Explorer versions a long time ago.
// There is no need for this header if you use Internet Explorer 7 or
// above (or any other browser)
// req.setRequestHeader('User-Agent','XMLHTTP/1.0');
if (postData)
req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
req.onreadystatechange = function () {
if (req.readyState != 4) return;
if (req.status != 200 && req.status != 304) {
// alert('HTTP error ' + req.status);
return;
}
callback(req);
}
if (req.readyState == 4) return;
req.send(postData);
}

var XMLHttpFactories = [
function () {return new XMLHttpRequest()},
function () {return new ActiveXObject("Msxml3.XMLHTTP")},
function () {return new ActiveXObject("Msxml2.XMLHTTP.6.0")},
function () {return new ActiveXObject("Msxml2.XMLHTTP.3.0")},
function () {return new ActiveXObject("Msxml2.XMLHTTP")},
function () {return new ActiveXObject("Microsoft.XMLHTTP")}
];

function createXMLHTTPObject() {
var xmlhttp = false;
for (var i=0;i<XMLHttpFactories.length;i++) {
try {
xmlhttp = XMLHttpFactories[i]();
}
catch (e) {
continue;
}
break;
}
return xmlhttp;
}

关于ajax - 检索跨浏览器 XmlHttpRequest 的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2557247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com