Origin is not allowed by Access-Control-Allow-Origin

I'm making an to a remote PHP server in a Sencha Touch 2 application (wrapped in PhoneGap).Ajax.request

The response from the server is the following:

XMLHttpRequest cannot load http://nqatalog.negroesquisso.pt/login.php. Origin is not allowed by Access-Control-Allow-Origin.http://localhost:8888

How can I fix this problem?


答案 1

I wrote an article on this issue a while back, Cross Domain AJAX.

The easiest way to handle this if you have control of the responding server is to add a response header for:

Access-Control-Allow-Origin: *

This will allow cross-domain Ajax. In PHP, you'll want to modify the response like so:

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

You can just put the setting in the Apache configuration or htaccess file.Header set Access-Control-Allow-Origin *

It should be noted that this effectively disables CORS protection, which very likely exposes your users to attack. If you don't know that you specifically need to use a wildcard, you should not use it, and instead you should whitelist your specific domain:

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

答案 2

If you don't have control of the server, you can simply add this argument to your Chrome launcher: .--disable-web-security

Note that I wouldn't use this for normal "web surfing". For reference, see this post: Disable same origin policy in Chrome.

One you use Phonegap to actually build the application and load it onto the device, this won't be an issue.