Angular GET请求错误,但仅限于Safari iOS

时间:2014-10-27 12:16:59

标签: javascript ajax wordpress angularjs mobile-safari

我使用wordpress作为后端构建网站,并将angularjs作为前端。我使用wordpress json API将我的数据发送到前端。

https://wordpress.org/plugins/json-api/

问题

我使用angular从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上,如果我记录错误参数,我会得到以下响应:

Error response 0?

这是safari调试器,我将iphone连接到我的macbook。我得到的错误响应是错误代码0 ..

到目前为止我尝试了什么

我设置了`Access-Control-Allow-Origin" *"在htaccess文件中,但这似乎不起作用。该请求是在具有相对URL的同一域上完成的,所以我甚至不认为这是问题所在。

任何人都知道为什么这不适用于safari(仅适用于iOS)?

提前致谢...

修改

根据要求提供一些额外信息:

1 个答案:

答案 0 :(得分:19)

我非常确定这是因为Safari是唯一具有阻止"第三方Cookie和其他网站数据的政策的浏览器。默认情况下。实际上,这个问题不应该是Safari iOS的专属,它也应该在你的OSX上使用Safari。我很确定如果MacBook中没有发生这种情况,是因为有一天你改变了"隐私"的默认设置。

你可以尝试这个,打开Safari,转到"偏好"并在标签" Pricacy"检查您是否有选项:"阻止cookie和其他网站数据"设置为"来自第三方和广告商"。这是现代版Safari中的第一个和默认选项。

在MacBook中,它将如下所示:

enter image description here

在iOS中它看起来像这样:

enter image description here

只是为了确认这实际上是导致您出现问题的原因:将此设置更改为"从不",清除缓存并尝试再次重现该问题。我非常有信心你无法重现它。

现在,如果您将其设置回"阻止Cookie和其他网站数据:来自第三方和广告客户"并且您首先清除缓存,您将再次遇到此问题(使用iOS或OSX)。在您确认这是导致问题的原因后,请将此设置重新设置为"来自第三方和广告客户",以便您可以使用默认设置重现并解决问题。

请记住,每次要重新测试此问题时,最好清除Safary的缓存。否则,Safari可能会决定可以信任服务于API的网站,并且您无法重现该问题。所以,每次测试时都要确保清除缓存

我认为这个问题的根源在于,Safari希望确保用户与其提供第三方内容的网页进行了直接互动。在主页面加载该内容之前。

我需要了解更多有关您的项目的信息,以便建议一个最佳的"解。例如:最终的应用程序是否会与API集成在同一个域中?因为如果是这样的话,那么当你去制作时你不应该有这个问题。我的意思是,如果您正在开发的应用程序将托管在http://whatever.yourDomain.org下,并且API将成为同一个域(yourDomain.org)的一部分,那么您不应该遇到该问题在生产中。

另一方面,如果您需要在不同的域下托管API,那么您必须找到一种方法来&"技巧"苹果浏览器。看看这个:

而且:

我希望这会有所帮助。