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/
我在 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/