2013-08-17 21 views
1

我試圖去掌握與燼和燼數據,但有正確處理CORS的問題。使用餘燼數據丟失選項請求

我已經設法定義一個模型等使用靜態夾具,但現在想要使用一些遠程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是ember app域,clara.eagle是api域)。

當我運行的應用程序不過鉻告訴我:

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(即vanilla jQuery)OPTIONS請求按預期運行。

我是新來的Ember os有可能是我失蹤的東西,但目前我看不到它!

+0

你有沒有注意到你的URL的API是'HTTP://克拉拉。老鷹'和你的後端設置指向'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