使用flask api的CORs请求 - Jquery POST请求导致OPTION

时间:2016-04-23 13:45:55

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

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

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

这是在我的localhost服务器上,它可以正确响应同一域上的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请求都存在跨域问题,我认为我已经通过向我的api添加烧瓶cors扩展来解决这些问题。

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

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

非常感谢任何建议。

1 个答案:

答案 0 :(得分:1)

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

尝试将其放在line 12 of your python server上:

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

你也可能只是CORS(app)(我从未使用过烧瓶,因此我不确定)。

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