Skip to main content
 首页 » 编程设计

javascript之无法使用 backbone.js 向 flask-restful API 发出请求

2025年05月04日2752php

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

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

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

我可以很好地向我的服务器发出 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 

第一天学习backbone就迷路了,我在freenode上问过同样的问题也没有得到答案。

如果您能指导我解决可能出现的问题,我将非常高兴。

请您参考如下方法:

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

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