javascript - XMLHttpRequest 调用不返回任何内容
问题描述
我正在制作一个网站,当按下网站上的按钮时,该网站需要对 python 脚本(在第三方网站上)进行 XMLHttpRequest 调用。然后,python 脚本将对数据进行更改,并将其返回给网站。
如果我调用现有的 API 测试器,例如:https ://reqres.in/api/users?page=2
但是,当我调用托管在我的网站上的自己的 python 脚本时,它不起作用。
这是托管在我的网站上的 python 脚本的代码https://example.com
:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/')
def testing():
return jsonify(test="Hello")
if __name__ == '__main__':
app.run()
...这是旨在从上述python脚本中获取数据的代码。
var myRequest = new XMLHttpRequest();
myRequest.open('GET', 'https://example.com');
myRequest.onreadystatechange = function () {
if (myRequest.readyState === 4) {
alert(myRequest.responseText);
}
}
document.getElementById("myButton").addEventListener("click",
function() {
myRequest.send();
}
);
如前所述,如果我使用已建立的 API 示例,例如https://reqres.in/api/users?page=2而不是https://example.com
那么它可以正常工作,所以我确定这是 python 脚本的问题,但我只是无法弄清楚是什么,因为没有错误消息。
解决方案
这似乎是一个 CORS 问题。当从服务器 A 加载的网页向服务器 B 发送请求(通过 XMLHttpRequest)时,我们将面临跨域资源共享 (CORS) 场景。这种请求必须满足某些要求(如https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS所述)。
长话短说,服务器 B(此处为 example.com)必须在其响应中提供额外的标头:
Access-Control-Allow-Origin: http://server-a-domain.com
以下也OK。顺便说一句,这就是您的示例服务器 regres.in 返回的内容。
Access-Control-Allow-Origin: *
如果您使用的是 Flask,请查看似乎提供通用解决方案的 Flask-CORS:https ://flask-cors.readthedocs.io/en/latest/
推荐阅读
- python - 使用 python 时,输出窗口在 Visual Studio 代码中不起作用
- go - GO 用 int 连接字符串
- django - Django模型中的多个自引用ForeignKey关系字段
- javascript - 试图确定对象的“内部”属性是否存在
- javascript - insertAdjacentHTML is not a function in todolist
- regex - Google Sheet:过滤单个单元格中的多个值
- mysql - 选择查询 Yii2 中的左连接 - 'on 子句'中的未知列'single'
- python - 如何使用从该脚本中的进度脚本调用的 rpyc 客户端的值
- php - 使用未定义的常量接触 - 假定“接触”错误
- python - 在 Odoo 12 中未运行(加载)单元测试