【问题标题】:CORs request with flask api - Jquery POST request results in OPTIONs使用烧瓶 api 的 COR 请求 - Jquery POST 请求导致选项
【发布时间】:2016-08-17 03:14:45
【问题描述】:

我有一个烧瓶 API 来控制浸入式加热器设备。

https://github.com/timcknowles/anovapi_backend/blob/master/anova.py

这是在我的本地主机服务器上,它正确响应同一域上的 JQuery POST 请求,例如

$(document).ready(function() {
            $("#start").click(function() {

                    $.ajax({
                      type: 'post',
                      url: 'http://192.168.0.13:5000/start',
                      dataType: 'jsonp',
                      success: function(data) {
                         $("#message").html(data);
                      }


$("#settemp").click(function() {

                    $.ajax({
                      type: 'post',
                      contentType: 'application/json',
                      url: ' http://192.168.0.13:5000/temp',
                      data: JSON. stringify ({"temp":"50"}),
                      dataType: 'json',
                      success: function(data) {
                         $("#message").html(data);
                      }
            });

但是我想在不同的服务器上构建一个 sinatra 客户端应用程序

https://github.com/timcknowles/anovapi_frontend/blob/master/main.rb

与同一个 api 交互。 jquery 是相同的,并且适用于 START 调用但对于 TEMP 调用它不起作用

在 Firefox 的开发者控制台中,我可以看到它有 OPTIONS 而不是 POST 请求(响应 200)。

最初,我的所有 api jQuery 请求都存在跨域问题,我认为我已经通过将烧瓶 cors 扩展添加到我的 api 来解决这些问题。

https://pypi.python.org/pypi/Flask-Cors

我不明白为什么临时调用不起作用但其他调用不起作用。我怀疑这是因为我以温度值的形式发送数据。

非常感谢任何建议。

【问题讨论】:

  • 第二次调用出现什么错误?
  • 它没有看到给出错误它只是不起作用
  • 在你的js中捕获错误函数或者在你的浏览器开发者工具中查看调用的结果是什么。
  • 实际上使用 chrome 控制台,这是错误:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'localhost:4567' 不允许访问。有趣的是,我现在可以在 chrome 上看到其他请求,例如start 也会生成错误 XMLHttpRequest cannot load 192.168.0.13:5000/start。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'localhost:4567' 不允许访问它们仍然可以工作并打开/关闭设备
  • 这里确实有一个额外的空间:JSON。字符串化

标签: jquery cors sinatra flask-restful flask-cors


【解决方案1】:

我认为您需要初始化 CORS() 才能使 Flask 工作。

试着把这个放在line 12 of your python server:

cors = CORS(app, resources={r"/*": {"origins": "*"}})

你也可以只使用CORS(app) (我从未使用过 Flask,所以我不确定)。

有关详细信息,请参阅简单用法下的Flask docs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多