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

服务器的响应如下:

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

我该如何解决这个问题?


当前回答

我会给你一个简单的解决方法。就我而言,我没有访问服务器的权限。在这种情况下,您可以更改您的谷歌Chrome浏览器的安全策略,以允许访问控制-允许起源。这很简单:

创建Chrome浏览器快捷方式 右键单击快捷方式图标->属性->快捷方式->目标

简单的粘贴到“C:\Program Files\谷歌\Chrome\Application\ Chrome .exe”——allow-file-access-from-files——disable-web-security。

位置可能不同。现在通过点击快捷方式打开Chrome。

其他回答

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

当您收到请求时,您可以

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

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

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

这可能对任何需要为引用器的'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');
 }

在Ruby on Rails中,你可以在控制器中执行以下操作:

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

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

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