Магистральный запрос выборки-это метод опций


У меня есть основной объект коллекции со следующим URL "http://localhost:8080/api/menu/1/featured". Я пытаюсь выполнить операцию выборки, чтобы извлечь коллекцию из url-адреса и проанализировать ее. Однако на стороне сервера тип метода, который я вижу для этого запроса, является OPTIONS. Предполагается, что сервер поддерживает только метод GET. Я не уверен, как Backbone выясняет, какой тип метода использовать,и почему он иногда случайно меняется на тип метода OPTIONS. Я использую узел.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();

Пожалуйста, помогите, спасибо!

4 17

4 ответа:

Прошло некоторое время, но я помню, что сталкивался с этим раньше. Есть две вещи, которые это может быть: Backbone по умолчанию пытался сделать RESTful API-вызовы для вашего бэкенда, это означает GET, POST, PUT и DELETE.

Многие бэкенды не были построены с реальной поддержкой REST и только поддерживают GET и POST. Когда Backbone отправляет команду PUT или DELETE, Ваш браузер (не Backbone) автоматически отправляет запрос опций, чтобы узнать, разрешено ли делать такие запросы. Если ваш сервер отвечает неправильно этот вызов провалится и, вероятно, позвоночник ничего не сделает.

, чтобы обойти этот набор Backbone.emulateHTTP = true; или чтобы ваш сервер правильно отвечал на вызовы опций. Дополнительную информацию смотрите в документации: http://backbonejs.org/#Sync-emulateHTTP

Другая проблема заключается в том, что вы делаете запросы ajax между доменами / субдоменами, и вам нужно правильно включить CORS. Это также включает в себя правильный ответ на запросы опций.

У меня была точно такая же проблема, как и у OP-использование Backbone и NodeJS для сохранения данных через POST-запрос CORS постоянно отправляло заголовок http-запроса OPTIONS, а не запускало POST-запрос вообще.

По-видимому, CORS с запросами, которые "вызовут побочные эффекты на пользовательские данные", заставят ваш браузер "предварительно обработать" запрос с заголовком запроса опций для проверки на утверждение, прежде чем фактически отправить ваш предполагаемый HTTP-запрос метод. https://developer.mozilla.org/en-US/docs/HTTP_access_control#Overview

Этот поток был тем, что решило мою проблему - Как разрешить CORS?

Плакат использовал некоторое промежуточное программное обеспечение для утверждения запросов PUT / GET / POST / DELETE, таких как so -

res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
...
next();

И next (); позволит продолжить проверку параметров в запросе POST.

Работал как мечта для меня, надеюсь, что это поможет кому-то еще тоже.

Позвоночник.js сопоставляет методы CRUD с HTTP. Взято из исходного кода Backbone:

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

Вероятно, проблема находится на вашем узле.JS backend.

Какую версию backbone вы используете? У меня была точно такая же проблема, но потом я понял, что использовал старую версию backbone (0.3.3) в учебнике. Обновил связь до последней магистрали.js (0.9.2)и подчеркивание.js (1.3.3) и он посылает как GET.