我刚开始学习backbone.js,我正在尝试将我们的网络客户端转换为骨干应用程序。但是,我无法向API发送简单请求。我们的Web服务是用python编写的,烧瓶式的。该应用程序仅向API发出OPTIONS请求。 (它应该提出请求)
我认为这不是骨干本身的问题,而是服务器的问题。因为当我将网址更改为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();
这是烧瓶的终点。
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上问了同样的问题,但是得不到答案。
如果你有什么事情可以指导我解决可能的问题,我会很高兴。
答案 0 :(得分:1)
我认为backbone.js期望来自PUT和POST请求的响应包含已更新/保存的对象。这就是为什么它不能与开箱即用的django-tastypie一起使用。
示例的响应标头显示"内容长度:0"。