Phonegap:请求的资源未包含“Access-Control-Allow-Origin”标头。因此,“null”来源无法访问。

8

在phonegap中,我在使用jQuery AJAX调用PHP文件时遇到了一个问题。调用文件时出现的错误如下:

请求的资源上未提供'Access-Control-Allow-Origin'头部信息

谷歌建议在当前PHP文件的头部加入以下代码 header('Access-Control-Allow-Origin: *'); 我已经将代码放在头部,但仍然没有改变。我已经将jsfidde连同代码一起附上。

文件connectionsqlphp.php的代码如下:

<?php 

header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json');
echo "hi";

?>

1
你的 config.xml 文件中有 <access origin="*" /> 吗? - Dawson Loudon
@Dawson Loudon 是的,我有。 - Sri
你是在手机/模拟器上测试还是在浏览器内部测试?如果你在桌面浏览器上测试,那么源错误更有可能发生。 - Ekim
我不是 PHP 专家,但你确定 echo "hi" 会生成有效的 JSON 输出吗? - QuickFix
@Ekim 我在手机浏览器中检查了一下,它没有显示任何错误,只是简单地闪烁了一下。 - Sri
显示剩余2条评论
1个回答

10

只要在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\"}";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接