【问题标题】:Can't make a request to flask-restful API with backbone.js无法使用backbone.js 向flask-restful API 发出请求
【发布时间】:2014-02-23 11:40:45
【问题描述】:

我刚开始学习backbone.js,我正在尝试将我们的网络客户端转换为骨干应用程序。但是我不能向 API 发送一个简单的请求。我们的 Web 服务是用 python 编写的,flask-restful。该应用程序仅向 API 发出 OPTIONS 请求。 (它应该发出一个 get 请求)

我确实认为这不是骨干本身的问题,而是服务器的问题。因为当我将 url 更改为 https://api.github.com 并将端点更改为 /gists/1 时,它就像一个魅力。 我已经阅读了几个关于类似问题的 stackoverflow 问题。我认为这是 stackoverflow 用户建议的 CORS 问题,我只在控制台上看到预检请求。

但是,我已经在我的服务器上将Access-Control-Allow-Origin 设置为*。此外,当我在 localhost 上运行服务器并从 localhost 发出请求时,它甚至都不起作用。 (端口不一样,但是不知道是不是端口不一样叫跨站)

我可以很好地向我的服务器发出 jquery ajax 请求。它只是不适用于骨干。

到目前为止,这是主干应用程序,

$.ajaxPrefilter( function( options, originalOptions, jqXHR ) {
    options.url = 'http://localhost:5000' + options.url;
});

var Complaints = Backbone.Collection.extend({
    url: '/complaint/recent'
});

var ComplaintList = Backbone.View.extend({
    el: ".content",
    render: function() {
        var that = this;
        var complaints = new Complaints();
        complaints.fetch({
            success: function(res) {
                console.log(res);
            }
        });
        // console.log("hede2");
        // return this.$el.html("hede2");
    }
});

cList = new ComplaintList();

// routers
var Router = Backbone.Router.extend({
    routes: {
        "": "home"
    }
});

var router = new Router();
router.on("route:home", function() {
    cList.render();
});

Backbone.history.start();

这是来自flask-restful的端点。

class ComplaintRecent(restful.Resource):
    def get(self):
        category = request.args.get('category', '')
        sinceid = request.args.get('sinceid', '')
        slug_city = request.args.get('slugcity', '')
        return ccomp.get_recent_complaints(category, sinceid, slug_city)

也许服务器响应可以帮助某人确定是否存在任何问题。

 00:28 ~ $ curl -I -X OPTIONS http://api.enforceapp.com/complaint/recent
HTTP/1.1 200 OK
Server: nginx/1.2.1
Date: Thu, 30 Jan 2014 22:31:51 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 0
Connection: keep-alive
Allow: HEAD, GET, OPTIONS
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE
Access-Control-Allow-Credentials: true

我在学习骨干的第一天迷路了,我在 freenode 上问过同样的问题,但无法得到答案。

如果您有什么可以指导我解决可能存在的问题,我会非常高兴。

【问题讨论】:

  • 您可能需要添加Access-Control-Allow-Headers: X-Requested-With ...但我不确定100%。如果您使用Allow-Origin: * 使一切正常,互联网还建议您使用Origin 标头的内容进行响应。
  • 要定义描述故障的服务器端或客户端,我们需要看到在.fetch调用上从客户端发送到服务器的原始请求数据。你能提供这个信息吗?

标签: javascript python backbone.js flask flask-restful


【解决方案1】:

我认为,backbone.js 期望 PUT 和 POST 请求的响应包含已更新/保存的对象。这就是为什么它不能与开箱即用的 django-tastypie 一起使用。

您示例的响应标头显示“内容长度:0”。

【讨论】:

    猜你喜欢
    • 2013-06-22
    • 2023-03-14
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    相关资源
    最近更新 更多