2013-08-17 6 views
1

Я пытаюсь справиться с данными ember и ember, но имею проблему с правильной обработкой CORS.Запрос отсутствующих опций с использованием данных ember

Мне удалось определить модель и т. Д. С помощью статического прибора, но теперь вы хотите использовать какой-то удаленный JSON. Так что я настройка Эмбер-данные, как это:

App = Ember.Application.create(); 

App.Store = DS.Store.extend({ 
    revision: 13, 
    adapter: DS.RESTAdapter.create({ 
     url: 'http://clara.eagle/v1/money' 
    }) 
}); 

модель, как это:

App.Transaction = DS.Model.extend({ 
    type:  DS.attr('string'), 
    occurrence: DS.attr('date'), 
    details: DS.attr('string'), 
    amount:  DS.attr('number'), 
    currency: DS.attr('string') 
}); 

И маршрут, как это:

App.IndexRoute = Ember.Route.extend({ 
    model: function() { 
     return App.Transaction.find(); 
    } 
}); 

В бэкэнде у меня есть существующий API, который вернет JSON за действительный GET запрос следующих заголовков CORS OPTIONS.

Access-Control-Allow-Origin: http://ember.eagle 
Access-Control-Allow-Headers: X-Requested-With, X-AUTHENTICATION, X-IP 
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS 

(ember.eagle является уголек домен приложения, clara.eagle является областью апи).

Когда я запустить приложение, однако хром говорит мне:

XMLHttpRequest cannot load http://clara.eagle/v1/money/transactions. Origin http://ember.eagle is not allowed by Access-Control-Allow-Origin.

Так что я смотрел на вкладку сети, чтобы увидеть, что результат OPTIONS запрос дал, кроме того что я мог найти. Хотя это объясняет, почему запрос API был неудачным, я не знаю, почему запрос OPTIONS не выполняется, поскольку он в конечном итоге делает запрос с помощью jQuery (как я понимаю).

Мой вопрос поэтому почему это OPTIONS запрос не сгенерирован? и если это не предназначено для того, как я могу это сделать?

Я тестировал, что запрос OPTIONS генерируется API и что запрос GET также работает, поэтому я не верю, что API неисправен (screenshot). Используя jQuery самостоятельно (т. Е. Ванильный jQuery), запрос OPTIONS выполняется, как ожидалось.

Я новичок в Ember os, возможно, что-то мне не хватает, но на данный момент я не вижу его!

+0

вы замечаете, что ваш URL в API является 'HTTP: // Клара.eagle' и ваши настройки базовой линии на 'http: // ember.eagle'? – intuitivepixel

+0

@intuitivepixel Простите, что вы имеете в виду? ember.eagle делает запрос clara.eagle - clara.eagle отмечает ember.eagle как разрешенное происхождение. – fenfe1

+0

Это только в IE? – TMQuinn

ответ

1

Вы могли бы попробовать это два изменения:

App.Store = DS.Store.extend({ 
    revision: 13, 
    adapter: DS.RESTAdapter.create({ 
    url: 'http://clara.eagle/v1/money', 
    corsWithCredentials: true 
    }) 
}); 

И дополнительно добавить к вашей конфигурации сервера Access-Control-Allow-Credentials: true это идет в сочетании с corsWithCredentials опции для АЯКС установки:

Access-Control-Allow-Origin: http://ember.eagle 
Access-Control-Allow-Headers: X-Requested-With, X-AUTHENTICATION, X-IP 
Access-Control-Allow-Credentials: true 
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS 

Надеется, что это помогает ,

0

В стороне клиента:

Ember.$.ajaxSetup({ 
    beforeSend: function(xhr) { 
     xhr.setRequestHeader('X-IP', 'some value'); 
    } 
}); 

или

Ember.$.ajaxSetup({ 
    headers: { 'X-IP': 'some value' } 
}); 

В стороне сервера, отвечая на options метода:

Access-Control-Allow-Origin: http://ember.eagle 
Access-Control-Allow-Methods: POST, GET, OPTIONS 
Access-Control-Allow-Headers: X-Requested-With, X-Prototype-Version, X-IP 
Access-Control-Max-Age: 1728000 
Смежные вопросы