Phonegap 请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'null' 不允许访问
Posted
技术标签:
【中文标题】Phonegap 请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin \'null\' 不允许访问【英文标题】:Phonegap No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed accessPhonegap 请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'null' 不允许访问 【发布时间】:2014-03-13 10:57:33 【问题描述】:在 phonegap 中,我在使用 jQuery AJAX 调用 php 文件时遇到了问题。调用文件时出现的错误是:
请求的资源上没有“Access-Control-Allow-Origin”标头
Google 说要把这段代码header('Access-Control-Allow-Origin: *');
放在当前的 PHP 文件头中。我将代码放在标题中,但仍然没有更改。我已经附上了我的jsfidde。
文件connectionsqlphp.php
代码在这里
<?php
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json');
echo "hi";
?>
【问题讨论】:
您的 config.xml 文件中有<access origin="*" />
吗?
@Dawson Loudon 是的,我有
您是在手机/模拟器上还是在浏览器中进行测试?如果您在桌面浏览器上进行测试,则更有可能发生源错误。
我不是php专家,但你确定echo "hi"
会生成一个有效的json输出???
@Ekim 我在手机中检查了浏览器,它没有给出任何错误,只是眨眼而已..
【参考方案1】:
只要在 config.xml 中正确配置访问源,phonegap/cordova 应该不会出现跨源问题。
如果您错过了一些 CORS 标头,则在从浏览器测试时出现此消息是正常的。尝试添加:
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST');
不过,对于 phonegap 应用,您再次不需要这些标头。
当您执行echo "hi";
时,您不是在发送 json,而是发送一个文本“hi”。 (仅在标头中写入 json 不会格式化您回显的内容)。
我认为您应该在 javascript 中使用 $.get
并从 php 中删除 header('Content-Type: application/json');
以便应用程序需要一个简单的文本或修改您的 php 以真正发送 JSON。
例如:
echo "message:\"hi\"";
【讨论】:
以上是关于Phonegap 请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'null' 不允许访问的主要内容,如果未能解决你的问题,请参考以下文章
django中的“请求的资源上不存在'Access-Control-Allow-Origin'标头”
如何解决请求的资源上不存在“Access-Control-Allow-Origin”标头
Angular 2请求的资源上不存在“Access-Control-Allow-Origin”标头[重复]
Http.post 请求的资源上不存在“Access-Control-Allow-Origin”标头