Jef*_*hen 17 javascript jquery options fetch backbone.js
我有一个Backbone Collection对象,其URL为"http:// localhost:8080/api/menu/1/featured".我正在尝试执行获取操作以从URL检索集合并解析它.但是,在服务器端,我为此请求看到的方法类型是OPTIONS.服务器只是支持GET方法.我不确定Backbone如何确定要使用的方法类型,以及为什么它有时会随机更改为OPTIONS方法类型.我正在使用Node.js服务器来处理请求.下面的代码几乎就是我所做的.
var FeaturedCollection = Backbone.Collection.extend({
model:FeaturedContent,
url:function () { return url_featured; },
parse:function (response) {
console.log(response);
return response;
}
});
var featuredCollection = new FeaturedCollection();
featuredCollection.fetch();
Run Code Online (Sandbox Code Playgroud)
请帮忙,谢谢!
Mau*_*ord 21
已经有一段时间了,但我记得之前遇到过这个问题.这可能是两件事:默认情况下,Backbone尝试对后端执行RESTful API调用,这意味着GET,POST,PUT和DELETE.
许多后端不是使用真正的REST支持构建的,只支持GET和POST.当Backbone发送PUT或DELETE命令时,您的浏览器(而非Backbone)会首先自动发送OPTIONS请求,以查看是否允许它发出这类请求.如果您的服务器应答不正确,则此呼叫将失败,并且可能Backbone将不会执行任何操作.
绕过此设置Backbone.emulateHTTP = true;或让您的服务器正确回答OPTIONS调用.有关详细信息,请参阅文档:http://backbonejs.org/#Sync-emulateHTTP
另一个问题是您正在进行跨域/子域的Ajax请求,您需要正确启用CORS.这还包括正确回答OPTIONS请求.
我有与OP完全相同的问题 - 使用Backbone和NodeJS通过CORS POST请求保存数据会不断发送OPTIONS http请求标头,而根本不会触发POST请求.
显然CORS的请求将"对用户数据产生副作用"将使您的浏览器"预检"带有OPTIONS请求标头的请求以检查批准,然后再实际发送您的预期HTTP请求方法. https://developer.mozilla.org/en-US/docs/HTTP_access_control#Overview
这个线程解决了我的问题 - 如何允许CORS?
海报使用了一些中间件批准PUT/GET/POST/DELETE请求,如此 -
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
...
next();
Run Code Online (Sandbox Code Playgroud)
和下一个(); 将允许OPTIONS检查继续POST请求.
对我来说就像一个梦想,希望它也可以帮助别人.
| 归档时间: |
|
| 查看次数: |
12629 次 |
| 最近记录: |