我在做一个Ajax。请求一个远程PHP服务器在Sencha Touch 2应用程序(包装在PhoneGap)。

服务器的响应如下:

XMLHttpRequest无法加载http://nqatalog.negroesquisso.pt/login.php。Access-Control-Allow-Origin不允许Origin http://localhost:8888。

我该如何解决这个问题?


当前回答

这可能对任何需要为引用器的'www'和'非www'版本提供异常的人来说都很方便:

 $referrer = $_SERVER['HTTP_REFERER'];
 $parts = parse_url($referrer);
 $domain = $parts['host'];

 if($domain == 'google.com')
 {
         header('Access-Control-Allow-Origin: http://google.com');
 }
 else if($domain == 'www.google.com')
 {
         header('Access-Control-Allow-Origin: http://www.google.com');
 }

其他回答

如果你在Angular.js中得到这个,那么确保你像这样转义你的端口号:

var Project = $resource(
    'http://localhost\\:5648/api/...', {'a':'b'}, {
        update: { method: 'PUT' }
    }
);

更多信息请看这里。

露比·辛纳屈

response['Access-Control-Allow-Origin'] = '*' 

对每个人来说

response['Access-Control-Allow-Origin'] = 'http://yourdomain.name' 

这是因为同源政策。详见Mozilla开发者网络或维基百科。

基本上,在您的示例中,您只需要从ncatalogg .negroesquisso.pt加载http://nqatalog.negroesquisso.pt/login.php页面,而不是从localhost加载。

正如Matt Mombrea在服务器端所说的那样,你可能会遇到另一个问题,即白名单拒绝。

你必须配置你的phonegap。plist。(我正在使用旧版本的phonegap)

对于cordova,命名和目录可能会有一些更改。但步骤应该大致相同。

首先选择支持文件> PhoneGap.plist

然后在“ExternalHosts”下面

添加一个值可能为“http://nqatalog.negroesquisso.pt”的条目。 我使用*仅用于调试目的。

你可以在不修改服务器的情况下让浏览器在HTTP OPTIONS的响应中包含Access-Control-Allow-Origin: *。

在Chrome中,使用这个扩展。如果你在Mozilla上检查这个答案。