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 文件中有 &lt;access origin="*" /&gt; 吗? @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”标头

请求的资源发布请求上不存在“Access-Control-Allow-Origin”标头

请求的资源上不存在 Jquery-No 'Access-Control-Allow-Origin' 标头