PhoneGap/Cordova中没有'Access-Control-Allow-Origin',还有Google中的最新版本Chrome

No 'Access-Control-Allow-Origin' in PhoneGap/Cordova, as well as the latest versions of Google Chrome

我在 Sencha Touch Framework 的跨移动平台工作,我 运行 我在 mac os x localhost 的项目,我试图通过 [=] 请求获得服务器的响应=19=]。我收到 CORS: XMLHttpRequest cannot load No 'Access-Control-Allow-Origin' No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access. The response had HTTP status code 403 的典型错误 我该如何解决我的问题以及我需要将 headers 信息放在服务器上的确切位置。

header('Access-Control-Allow-Origin: *'); 
header('Access-Control-Allow-Headers: X-Requested-With'); 
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');

这些是我在我的服务器上需要的 headers,但我仍然无能为力并且从服务器收到同样的错误。我请求的网站在 Wordpress 中,我尝试了 jt-cross-domain-ajax 插件来解决我的问题,但我无法做到这一点。

我的服务器代码:

    add_action('wp_ajax_fun', 'myFunc');
    add_action('wp_ajax_nopriv_fun', 'myFunc');
    function myFunc()
    {
// Here I'm currenlty putting the header informatioins
        wp_send_json_success("I'm Working");
        die();
    }

我的 Sencha Touch 代码:

 Ext.Ajax.request({
                url: URL, // Some url
                method: 'GET',
                callback: function(options, success, response) {
                    Ext.ComponentQuery.query('#id')[0].setHtml( response.responseText );
                }
            });

我的问题是如何解决我的问题,我应该把 headers 来源的信息放在哪里,实现这个目标的步骤是什么。

您需要在您的 Sencha Touch 代码中将 headers 放入要向其发送请求的 PHP 文件中。

如果可能的话,我会在开发期间在本地提供服务 运行,这样我就可以在那里点击它们,然后一旦您的应用程序被打包为带有 Cordova 或 PhoneGap 的本机应用程序,您将不会有任何问题 Ajax 请求到任何域(因为 Ajax 请求不会由 localhost 域完成)。还研究了 CORS 和 JSONP 以进行跨域 Ajax 请求。

您的 Sencha Touch 应用程序 运行 在实际的 PhoneGap / Cordova 应用程序中不会出现问题。通常此类问题可以通过降低桌面浏览器的安全级别来解决。

但是,如果您真的想在桌面环境中模拟您的项目,(我最喜欢的方法)这里有一些使用 Google Chrome 浏览器的步骤:

  • 完全退出 Chrome 浏览器。
  • 打开你的终端。只需键入此命令。

open /Applications/Google\ Chrome.app/ --args --disable-web-security

  • 重新运行你的Chrome。如果 chrome 安全性被成功禁用,您应该会在 chrome 视图的顶部看到黄色警告栏。

  • 通过打开 index.html

  • 打开您的 Sencha Touch 项目

就是这样。您将不会再遇到 'Access-Control-Allow-Origin' 问题。

更新:

最近 Google Chrome Mac OSX 中的更新(版本 49.0.2623.87)仍然给我 CORS 问题,即使我 运行 通过上面命令。为了克服它,我必须另外指定 --user-data-dir 。现在应该是:

open /Applications/Google\ Chrome.app/ --args --disable-web-security --user-data-dir=~/ChromeUserData/