Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干提取请求是一种可选方法_Javascript_Jquery_Backbone.js_Fetch_Options - Fatal编程技术网

Javascript 主干提取请求是一种可选方法

Javascript 主干提取请求是一种可选方法,javascript,jquery,backbone.js,fetch,options,Javascript,Jquery,Backbone.js,Fetch,Options,我有一个具有以下URL的主干集合对象“http://localhost:8080/api/menu/1/featured". 我正在尝试执行一个获取操作,以从url检索集合并对其进行解析。但是,在服务器端,我看到这个请求的方法类型是OPTIONS。假定服务器只支持GET方法。我不知道主干网是如何确定要使用什么方法类型的,以及为什么它有时会随机更改为OPTIONS方法类型。我正在使用Node.js服务器来处理请求。下面的代码和我做的差不多 var FeaturedCollection = Back

我有一个具有以下URL的主干集合对象“http://localhost:8080/api/menu/1/featured". 我正在尝试执行一个获取操作,以从url检索集合并对其进行解析。但是,在服务器端,我看到这个请求的方法类型是OPTIONS。假定服务器只支持GET方法。我不知道主干网是如何确定要使用什么方法类型的,以及为什么它有时会随机更改为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();

请帮忙,谢谢

Backbone.js将CRUD方法映射到HTTP。取自主干网的源代码:

var methodMap = {
  'create': 'POST',
  'update': 'PUT',
  'delete': 'DELETE',
  'read':   'GET'
};
Backbone.sync = function(method, model, options) {
   var type = methodMap[method];

问题可能存在于node.js后端

您使用的是什么版本的主干网?我也有同样的问题,但后来意识到我在一个教程中使用了旧版本的主干(0.3.3)。将链接升级到最新的backbone.js(0.9.2)和underline.js(1.3.3)并作为GET发送。

我遇到了与OP完全相同的问题-使用backbone和NodeJS通过CORS POST请求保存数据会不断发送一个OPTIONS http请求头,而根本不会触发POST请求

显然,带有“对用户数据造成副作用”的请求的CORS会在实际发送预期的HTTP请求方法之前,让您的浏览器“预飞”带有选项请求头的请求,以检查批准情况。

这条线解决了我的问题-

海报使用了一些中间件来批准PUT/GET/POST/DELETE请求,例如-

res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
...
next();
下一个();将允许选项检查继续到POST请求


对我来说,工作就像一场梦,希望它也能帮助别人。

已经有一段时间了,但我记得以前遇到过这个问题。这可能有两件事:主干默认情况下尝试对后端执行RESTful API调用,这意味着GET、POST、PUT和DELETE

许多后端没有真正的REST支持,只有GET和POST支持。当主干发送PUT或DELETE命令时,您的浏览器(不是主干)会首先自动发送选项请求,以查看是否允许发出此类请求。如果您的服务器应答不正确,此调用将失败,主干网可能不会做任何事情

要绕过此设置
Backbone.emulateHTTP=true或让服务器正确应答选项呼叫。有关更多信息,请参阅文档:


另一个问题是,您正在跨域/子域发出ajax请求,并且需要正确地启用CORS。这还包括正确回答选项请求。

我认为这个答案不对。我对save()方法+CORS也有同样的问题。我的服务器可以正确处理CORS调用,我也使用$.ajax和外部REST接口测试仪进行了测试。现在,我使用model.save()发送POST调用,访问控制请求方法是POST,但该方法是OPTIONS,因此我的服务器感到困惑,并返回404头。。我在服务器端使用PHP SLIM。仅仅因为它对您不起作用并不意味着它对其他人没有帮助。抱歉,我对您的设置了解不多,可能还有其他一些问题。通过CORS调用,您有一个飞行前选项调用,如果您对访问控制请求-*标头和访问控制允许-*标头的响应不好,则您的原始请求将失败。这是我的问题,但我现在读到你也写了同样的东西,所以请原谅我投了反对票!我们可以这样做:
if request.method==“OPTIONS”return 200
来告诉前端选项请求可以处理吗?我使用的是Python后端,不确定是否有与next()等价的版本。