javascript – Angular GET請求錯誤,但只適用於safari iOS
我正在建立一個使用wordpress作為後端的網站,並將angularjs作為前端.我正在使用wordpress json API來獲取我的資料到前端.
ofollow,noindex" target="_blank">https://wordpress.org/plugins/json-api/
問題
我使用角度從wordpres json API獲取我的資料.我建立了以下服務:
this.getPage = function ( slug ) { return $http.get('wordpress/api/get_page/?slug=' + slug) }
我在控制器中使用這個服務來獲取當前頁面
HTTPService.getPage('home') .success(function ( data ) { $scope.page = data.page; console.log(arguments); }) .error( function () { console.log(arguments); })
所以這在所有的瀏覽器中都可以正常工作,除了safari iOS.在Safari iOS上,如果我記錄錯誤引數,我會得到以下響應:
這是safari偵錯程式,我把我的iphone連線到我的macbook.我得到的錯誤響應是錯誤程式碼0 ..
我迄今為止所嘗試過的
我在htaccess檔案中設定了“Access-Control-Allow-Origin”*“,但這似乎不起作用.該請求在相同的域上使用相對URL完成,所以我甚至不認為這是問題.
那麼any1知道為什麼這不適用於safari(僅限iOS)?
提前致謝…
編輯
根據要求提供一些額外資訊:
我很確定這是因為Safari是預設情況下唯一具有阻止“第三方Cookie和其他網站資料”策略的瀏覽器.實際上,這個問題不應該是Safari iOS的排他性,也應該在OSX上使用Safari.我很確定,如果沒有發生在你的MacBook是因為有一天你更改了預設設定的“隱私”.
您可以嘗試這樣做,開啟Safari,轉到“首選項”,如果您有選項:“阻止Cookie和其他網站資料”設定為“來自第三方和廣告客戶”,請選擇“價格”檢查.這是Safari的現代版本中的第一個,也是預設選項.
在您的MacBook中,它將如下所示:
在iOS中,它將如下所示:
只是為了確認這實際上是導致您的問題:將此設定更改為“從不”,清除快取並嘗試再次重現該問題.我相信你將無法再現它.
現在,如果您將其設定為“阻止Cookie和其他網站資料:來自第三方和廣告客戶”,並且您首先清除快取,則會再次出現該問題(使用iOS或OSX).在您確認這是您的問題的原因後,請將此設定設定回“從第三方和廣告客戶”,以便您可以使用預設設定再現和解決問題.
記住,每次你想重新測試這個問題,你將更好地清除Safary的快取.否則,Safari可能會發現,服務於API的站點可以被信任,您將無法再現問題.所以,只是為了確保,每次你測試這個清除快取.
我相信,這個問題的根源在於,Safari在確定該主頁載入該內容之前,確保該使用者與“第三方內容”的頁面進行直接互動.
我將需要更多地瞭解您的專案,以建議一個“最佳”解決方案.例如:最終應用程式是否會與API整合在同一個網域?因為如果是這樣,當你去生產時,你不應該有這個問題.我的意思是,如果您正在開發的應用程式將託管在:http://whatever.yourDomain.org和API將成為同一個域(yourDomain.org)的一部分,那麼您不應該有這個問題在生產中.
另一方面,如果您需要將API託管在不同的域下,那麼您將不得不找到一種“欺騙”Safari的方法.看看這個:
>Safari 3rd party cookie iframe trick no longer working?
和這個:
>http://www.allannienhuis.com/archives/2013/11/03/blocked-3rd-party-session-cookies-in-iframes/
我希望這有幫助.
http://stackoverflow.com/questions/26587400/angular-get-request-error-but-only-on-safari-ios