我有一个简单的 Python 服务器,它对每个请求响应“ALIVE”,并用
flask-cors
封装在 CORS 中。
当从任何其他浏览器(Linux 上的 Chromium 127 和 Firefox 129,Windows 7 上的 Palemoon 33.2.1)发送 XMLHttpRequest 时,服务器会获取它,并打印它已获取它(
127.0.0.1 - - [date] "GET / HTTP/1.1" 200 -
),并且浏览器会收到响应。
当从IE8发送XMLHttpRequest时,浏览器中的日志显示请求已发送,但服务器没有收到。
我尝试用服务器替换http://google.com/和http://example.com/,IE8仍然没有得到响应,而其他浏览器工作正常。
我还尝试删除 CORS,但这对其他所有浏览器都造成了破坏,并且没有针对 IE8 修复它。
最小可重现示例:
页码:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Broken Ajax MRE</title>
</head>
<body>
<script type="text/javascript">
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://localhost:8080", true);
xhr.onload = function () {
console.log("Responded: " + xhr.status + " " + xhr.response);
};
xhr.onerror = function () {
console.log("Network Error!");
};
xhr.send();
console.log("Sent");
</script>
</body>
</html>
服务器:
from flask import Flask
from flask_cors import CORS, cross_origin
app = Flask(__name__)
CORS(app)
@app.route("/")
def is_alive():
return "ALIVE"
app.run(host="127.0.0.1", port=8080)
我做错了什么?
对于任何寻找答案的人:
使用
xhr.onreadystatechange
。 xhr.onload
IE8 不支持。
var request = new XMLHttpRequest();
request.open('GET', '/my/url', true);
request.onreadystatechange = function () {
if (this.readyState === 4) {
if (this.status >= 200 && this.status < 400) {
// Success! If you expect this to be JSON, use JSON.parse!
success(this.responseText, this.status);
} else {
error();
}
}
};
request.send();