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

服务器的响应如下:

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

我该如何解决这个问题?


当前回答

露比·辛纳屈

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

对每个人来说

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

其他回答

当您收到请求时,您可以

var origin = (req.headers.origin || "*");

而当你不得不这样回答的时候:

res.writeHead(
    206,
    {
        'Access-Control-Allow-Credentials': true,
        'Access-Control-Allow-Origin': origin,
    }
);

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

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

在使用各种api时,我遇到过几次这种情况。通常一个快速的解决方法是在字符串的末尾添加“&callback=?”有时&号必须是字符代码,有时是“?””:“回调= ?”(见预测。jQuery的API使用方法

我曾经写过一篇关于这个问题的文章,Cross Domain AJAX。

如果你有响应服务器的控制权,最简单的方法是添加一个响应头:

Access-Control-Allow-Origin: *

这将允许跨域Ajax。在PHP中,你需要像这样修改响应:

<?php header('Access-Control-Allow-Origin: *'); ?>

你可以把头集Access-Control-Allow-Origin *设置放在Apache配置或htaccess文件中。

应该注意的是,这将有效地禁用CORS保护,这很可能使您的用户暴露在攻击之下。如果你不知道你特别需要使用通配符,你不应该使用它,相反,你应该把你的特定域列入白名单:

<?php header('Access-Control-Allow-Origin: http://example.com') ?>

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

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

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

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

然后在“ExternalHosts”下面

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