Javascript 否';访问控制允许原点';标题已存在
我正在使用angular.js为使用cordova的移动设备制作一个ReSTful应用程序。 对于服务器端,我使用的是slim framework.all,根据本教程:() 但当我将api文件夹上载到服务器时,出现错误: 请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源“localhost”。响应的HTTP状态代码为404 我读过关于添加“访问控制允许来源”的内容 并根据这个环节实施: 也试过Javascript 否';访问控制允许原点';标题已存在,javascript,php,angularjs,cordova,slim,Javascript,Php,Angularjs,Cordova,Slim,我正在使用angular.js为使用cordova的移动设备制作一个ReSTful应用程序。 对于服务器端,我使用的是slim framework.all,根据本教程:() 但当我将api文件夹上载到服务器时,出现错误: 请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源“localhost”。响应的HTTP状态代码为404 我读过关于添加“访问控制允许来源”的内容 并根据这个环节实施: 也试过 $app->get('/session',
$app->get('/session', function() {
**$session->header('Access-Control-Allow-Origin', '*');**
$db = new DbHandler();
$session = $db->getSession();
$response["uid"] = $session['uid'];
$response["email"] = $session['email'];
$response["name"] = $session['name'];
echoResponse(200, $session);
});
我仍然收到同样的错误
-->最后一行正确吗<代码>回声响应(200美元会话)代码>
提前感谢:)
更新
我在firefox和chrome上使用相同的文件,chrome可以访问服务器上的文件。
另外,我服务器上的一个JSON文件早些时候被cordova应用程序访问,现在无法工作。调用代码与ie完全相同
.controller('ListController', ['$scope', '$http', function($scope, $http) {
$http.get('js/data.json').success(function(product_data) {
$scope.artists = product_data;
});
}])
使用
--禁用web安全标志打开Chrome。这将阻止它出现,并允许您在桌面上进行开发
Cordova/PhoneGap基本上是在应用程序表单中为您执行此操作。根据您所使用的操作系统的不同,您可能需要查看一下如何使用该标志打开它
另外,在启用标志的情况下,不要继续使用浏览器进行正常活动。如果可能,还可以使用CLI打开新的用户配置文件,这样就不会影响现有配置文件并使您面临任何安全漏洞。某些web浏览器不允许从localhost(或localhost的任何别名,如127.0.0.1)使用COR。解决方案是使用非本地主机url访问它
其中一个可能有效的url是您的IP地址
如果您不想使用IP地址(可能是因为每次连接时路由器都会随机分配该地址),那么您可以通过修改/etc/hosts
(或Windows上的Windows\System32\Drivers\etc\hosts
)为自己分配一个假域
例如,将其添加到/etc/hosts
:
127.0.1.1 thismachine
然后,您可以通过键入http://thismachine
在您的web浏览器中。多读一些内容……不止一个标题,还需要考虑飞行前的请求。好的开始是将标题写入实际响应。您现在正试图将其写入未定义的变量中。改用$app->response->header(…)。@MikaTuupola您的意思是只为该行或任何地方更改(到$app->response)?为什么建议这样做而不是实现CORS?这是一个服务器端问题,因此手机也会有同样的问题。这是我在本地服务器上尝试应用程序时所做的,但问题来自服务器,因为没有授予权限。@Cerad这是我在最近使用的cordova应用程序上解决问题的方法,不同之处在于我使用的是第三方API。但是,如果它起作用,那就没问题了。不幸的是,在这种情况下,它似乎不起作用。上面两个代码中的哪一个是正确的,以及哪一个变量应该放在最后一行只有一个代码。第二个是你在浏览器中键入的内容,你定义域的哪一行并不重要。我宁愿把它放在文件的最上面。有些人喜欢把它放在最后一行。只要确保文件以换行结束,以防一些软件在没有换行的情况下拒绝处理最后一行-这就是我喜欢将其放在顶部的原因。
127.0.1.1 thismachine