XMLHttpRequest调用什么都不返回

时间:2018-09-30 14:19:05

标签: javascript python api xmlhttprequest

我正在建立一个网站,当按下网站上的按钮时,该网站需要对python脚本进行XMLHttpRequest调用(在第三方网站上)。然后,python脚本将对数据进行更改,然后将其返回到网站。

如果我调用现有的API测试器,例如https://reqres.in/api/users?page=2

,就可以使用此功能

但是,当我调用托管在我的网站上的自己的python脚本时,它不起作用。

这是我的网站https://example.com上托管的python脚本的代码:

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脚本的问题,但是我可以因为没有错误消息,所以无法弄清楚。

1 个答案:

答案 0 :(得分:1)

这似乎是CORS问题。当从服务器A加载的网页正在将请求(通过XMLHttpRequest)发送到服务器B时,我们将面临跨域资源共享(CORS)场景。这种请求必须满足某些要求(如https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS中所述)。

长话短说,服务器B(此处为example.com)必须在其响应中提供额外的标头:

Access-Control-Allow-Origin: http://server-a-domain.com

以下内容也可以。顺便说一下,这就是您的示例服务器regres.in返回的内容。

Access-Control-Allow-Origin: *

如果您使用的是Flask,请查看似乎可以提供通用解决方案的Flask-CORS:https://flask-cors.readthedocs.io/en/latest/