자바 스크립트에서 Python 서버로 XmlHttpRequest를 통해 데이터를 보내야합니다. localhost를 사용하기 때문에 CORS를 사용해야합니다. 나는 플라스크 프레임 워크와 그의 모듈 flask_cors를 사용하고 있습니다.Javascript - 요청한 리소스에 'Access-Control-Allow-Origin'헤더가 없습니다.
var xmlhttp;
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
}
else {// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("POST", "http://localhost:5000/signin", true);
var params = "email=" + email + "&password=" + password;
xmlhttp.onreadystatechange = function() {//Call a function when the state changes.
if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
alert(xmlhttp.responseText);
}
}
xmlhttp.send(params);
및 파이썬 코드 : 자바 스크립트로 나는이 가지고
@app.route('/signin', methods=['POST'])
@cross_origin()
def sign_in():
email = cgi.escape(request.values["email"])
password = cgi.escape(request.values["password"])
하지만 난 그것을 실행할 때이 메시지가 얻을 것이다 :
XMLHttpRequest cannot load localhost:5000/signin. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
내가 그것을 해결하는 방법을? "Access-Control-Allow-Origin"헤더를 사용해야한다는 것을 알고 있지만이 코드에서 구현하는 방법을 모르겠습니다. 그건 그렇고 순수한 자바 스크립트를 사용해야합니다. 고맙습니다.
"NameError : name 'crossdomain'이 정의되지 않았습니다." 문제를 해결하려면 무엇을 가져 옵니까? –
링크에서 데코레이터를 복사하여 플라스크 애플리케이션에 붙여 넣어야합니다. 그곳에 들어가면 크로스 도메인이 정의되고 모든 것이 작동합니다. –
Python 3.x 사용자를위한 중요 사항 : 게시물에 링크 된 데코레이터 코드는 Python 3.x에서 작동하지 않습니다. Python 3.x에서는 basestring을 사용할 수 없기 때문에 "NameError : name 'basestring'is not defined"오류가 발생합니다. "basestring"대신 "list"를 사용하여 코드를 변경하면 작동합니다. – Zafer