2014-09-28 15 views
2

已更新的問題: 簡單的客戶端HTTP.get()調用在iOS模擬器上不起作用。同樣的調用是在瀏覽器的模板中獲取數據及其完美顯示(localhost:3000) 早些時候我認爲這與本地集合有關,但問題實際上是HTTP.get調用沒有返回任何數據在cordova(ios仿真器或設備)內。爲什麼客戶端的HTTP.get()調用在Cordova(Meteor 0.9.3)中不起作用?

請注意,我的整個代碼只在客戶端if(Meteor.isClient){}而沒有if(Meteor.isCordova){}。

原始問題:是否可以在Cordova(Meteor 0.9.3)中定義一個本地集合? 我在我的應用程序中有一個本地(僅客戶端)集合,如圖所示: Items = new Meteor.Collection(null);

此本地集合暫時從外部API獲取數據(通過添加'meteor add http'並使用HTTP.get()),並將此內容推送到模板。這通過helpers(返回Items.find())在localhost:3000上的瀏覽器模板中完美呈現,但是當我運行'meteor run ios'時,數據不會在iOS模擬器中加載。

首先,是否有可能期望本地收藏在科爾多瓦內工作? 應該在裏面定義: Meteor.isCordova({})? 是否需要添加cordova特定包裝? 我相信在這種情況下本地收集是必要的,因爲數據是根據用戶的設備位置及其僅與當前會話相關來檢索的。

任何想法將不勝感激。

(流星小白這裏,對不起,如果這聽起來很愚蠢!)

編輯:集合了服務器和客戶端上定義都在瀏覽器中,以及在iOS模擬器正在工作。所以問題只在於本地收藏。

+0

我不認爲科爾多瓦和當地收藏有什麼特別之處。您可能還有其他一些錯誤,比如沒有連接到服務器,或者沒有CORS頭文件與外部服務進行通信,因爲cordova代碼是從不同的來源提供的。 – imslavko 2014-09-28 21:35:50

+0

@imslavko對不起,我應該提到我可以訪問在iOS模擬器中定義在服務器和客戶端上的集合(就像在我的文件夾結構中的常見「集合」文件夾中)。這意味着我的應用程序的cordova部分運行正常。而且,CORS標頭由Chrome瀏覽器插件處理。因此,只有在使用本地收藏時,我才能合理確信它是一個問題。 – insaneinc 2014-09-29 05:32:08

+0

我不知道你在說什麼Chrome瀏覽器插件。 – imslavko 2014-09-29 16:29:02

回答

2

@imslavko
你的確是對的!它是我在進行API調用的服務器上的CORS問題。 幾天後,我終於明白服務器沒有Access-Control-Allow-Origin:*用於簡單的GET/POST請求。

感謝您的幫助,搞清楚這一點。

所以事實證明科爾多瓦與此無關。所有HTTP.get()調用都可以在Cordova中完美運行,包括本地集合。

+0

這裏是如何解決:http:// enable-cors。組織/ server_meteor.html – krivar 2015-05-29 10:05:54

0

還有一個需要注意的技巧。

HTTP.get('/route')可能最終會在手機本地服務器而不是遠程服務器的數據來自 - 所以你不會收到你所期望的數據。

而是使用

HTTP.get(__meteor_runtime_config__.ROOT_URL + '/route') 

因爲ROOT_URL變量指向兩個科爾多瓦應用程序和瀏覽器正常正確的服務器。

相關問題