我遇到了“Cross-Origin Request Blocked”的问题。我试图首先从服务器,而不是从所有(“*”)。每次在chrome开发人员工具包上都有相同的错误消息。
这是我的烧瓶python代码:
application = Flask(__name__)
application.config.from_object(__name__)
cors = CORS(application, resorces={r'/*': {"origins": '*'}})
@application.route("/get-live-data",methods=['GET'])
@cross_origin()
def live_data():
con = connect_db()
cur = con.cursor()
cur.execute("SELECT * from envoiContinuT")
sqlite_result = cur.fetchall()
cle = json.load(open(JSON_STATUS))
parametres = json.load(open(JSON_PARAMETRES))
descT = []
for key in cle["status"]:
attr = parametres[key]
if attr["envoiC"] == 1:
descT.append(attr["description"])
response = any_response(flask.jsonify(data=descT))
return response
这是我的Ajax代码:
var baseURL = "http://localhost:8000";
function getLiveData(data){
//Get the parameters descriptions
$.ajax({
method: 'GET',
url:baseURL + '/get-live-data',
headers: {
"Accept" : "application/json",
"Content-type": "application/json"
},
success:function(data){
console.log(data);
//populateAccordion(data);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
console.log("Status: " + textStatus);
console.log("Error: " + errorThrown);
}
});
}
感谢您的回答!
答案 0 :(得分:1)
你这里有一个错字:
cors = CORS(application, resorces={r'/*': {"origins": '*'}})
^^^^^^^^
应该是:
cors = CORS(application, resources={r'/*': {"origins": '*'}})
此外,为 Content-type
请求发送GET
请求标头毫无意义。 GET
请求没有请求正文,因此无需指定内容类型。所以只需这样做:
headers: {
"Accept" : "application/json",
},
否则,如果您发送的Content-Type
请求标头的值为application/json
,则会触发您的浏览器执行CORS preflight OPTIONS
request,并且您的配置必须允许它:
@application.route("/get-live-data",methods=['GET', 'POST'])
@cross_origin(headers=['Content-Type']) # Send Access-Control-Allow-Headers
但是如果您允许Content-Type
请求标头,那么您也可以允许POST
请求(如上所述) - 因为前面提到的那样,仅仅为{{1}提供它是没有意义的请求。